Di aplikasi iOS 5 saya, saya punya NSString
yang berisi string JSON. Saya ingin deserialize bahwa representasi string JSON menjadi NSDictionary
objek asli .
"{\"password\" : \"1234\", \"user\" : \"andreas\"}"
Saya mencoba pendekatan berikut:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:@"{\"2\":\"3\"}"
options:NSJSONReadingMutableContainers
error:&e];
Tapi itu melempar kesalahan runtime. Apa yang saya lakukan salah?
-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c'
Jawaban:
Sepertinya Anda mengirimkan
NSString
parameter di mana Anda harus melewatiNSData
parameter:sumber
nil
sebagai kesalahan alih-alih&e
dalam XCode 5Misalnya Anda memiliki
NSString
karakter khusus diNSString
strChangetoJSON. Kemudian Anda dapat mengonversi string itu menjadi respons JSON menggunakan kode di atas.sumber
Saya telah membuat kategori dari jawaban @Abizern
Gunakan seperti ini,
sumber
error
dalam kasus ini, tetapi sebaliknya untuk menguji apakah nilai pengembaliannya nol atau tidak sebelum kembali. yaitureturn json ?: nil;
Minor nitpick, tetapi layak disebut, saya pikir.nil
segera kembali .Dengan Swift 3 dan Swift 4,
String
memiliki metode yang disebutdata(using:allowLossyConversion:)
.data(using:allowLossyConversion:)
memiliki deklarasi berikut:Dengan Swift 4,
String
'sdata(using:allowLossyConversion:)
dapat digunakan bersama denganJSONDecoder
' sdecode(_:from:)
untuk deserialize string JSON ke dalam kamus.Lebih lanjut, dengan Swift 3 dan Swift 4,
String
'sdata(using:allowLossyConversion:)
juga dapat digunakan bersama denganJSONSerialization
' sjsonObject(with:options:)
untuk deserialize string JSON ke dalam kamus.# 1. Solusi Swift 4
Dengan Swift 4,
JSONDecoder
memiliki metode yang disebutdecode(_:from:)
.decode(_:from:)
memiliki deklarasi berikut:Kode Playground di bawah ini menunjukkan cara menggunakan
data(using:allowLossyConversion:)
dandecode(_:from:)
untuk mendapatkanDictionary
dari yang diformat JSONString
:# 2. Solusi Swift 3 dan Swift 4
Dengan Swift 3 dan Swift 4,
JSONSerialization
memiliki metode yang disebutjsonObject(with:options:)
.jsonObject(with:options:)
memiliki deklarasi berikut:Kode Playground di bawah ini menunjukkan cara menggunakan
data(using:allowLossyConversion:)
danjsonObject(with:options:)
untuk mendapatkanDictionary
dari yang diformat JSONString
:sumber
Menggunakan kode Abizern untuk swift 2.2
sumber