Saya ingin membuat satu fungsi di proyek cepat saya yang mengubah format String ke Kamus json tapi saya mendapat satu kesalahan:
Tidak dapat mengonversi jenis ekspresi (@lvalue NSData, opsi: IntegerLitralConvertible ...
Ini kode saya:
func convertStringToDictionary (text:String) -> Dictionary<String,String> {
var data :NSData = text.dataUsingEncoding(NSUTF8StringEncoding)!
var json :Dictionary = NSJSONSerialization.JSONObjectWithData(data, options:0, error: nil)
return json
}
Saya membuat fungsi ini di Objective-C:
- (NSDictionary*)convertStringToDictionary:(NSString*)string {
NSError* error;
//giving error as it takes dic, array,etc only. not custom object.
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
return json;
}
json
swift
dictionary
nsjsonserialization
trousout
sumber
sumber
let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: String];
Jawaban:
Peringatan: ini adalah metode praktis untuk mengonversi string JSON ke kamus jika, karena alasan tertentu, Anda harus bekerja dari string JSON. Tetapi jika Anda memiliki data JSON yang tersedia, Anda sebaiknya bekerja dengan data tersebut , tanpa menggunakan string sama sekali.
Cepat 3
Cepat 2
Jawaban Swift 1 asli:
Di versi Anda, Anda tidak meneruskan parameter yang tepat ke
NSJSONSerialization
dan lupa untuk memberikan hasilnya. Juga, lebih baik untuk memeriksa kemungkinan kesalahan. Catatan terakhir: ini hanya berfungsi jika nilai Anda adalah sebuah String. Jika ini bisa menjadi tipe lain, akan lebih baik untuk mendeklarasikan konversi kamus seperti ini:dan tentu saja Anda juga perlu mengubah jenis pengembalian fungsi:
sumber
Saya telah memperbarui jawaban Eric D untuk Swift 5 :
sumber
Swift 3 :
sumber
Dengan Swift 3,
JSONSerialization
memiliki metode yang disebutjsonObject(with:options:)
.jsonObject(with:options:)
memiliki deklarasi berikut:Saat Anda menggunakan
jsonObject(with:options:)
, Anda harus berurusan dengan penanganan kesalahan (try
,try?
atautry!
) dan mengetikkan casting (dariAny
). Oleh karena itu, Anda dapat menyelesaikan masalah Anda dengan salah satu pola berikut.# 1. Menggunakan metode yang melempar dan mengembalikan tipe non-opsional
Pemakaian:
# 2. Menggunakan metode yang melempar dan mengembalikan tipe opsional
Pemakaian:
# 3. Menggunakan metode yang tidak membuang dan mengembalikan tipe non-opsional
Pemakaian:
# 4 Menggunakan metode yang tidak membuang dan mengembalikan tipe opsional
Pemakaian:
sumber
Cepat 4
sumber
Cepat 5
sumber
Saya menemukan kode yang mengubah string json ke NSDictionary atau NSArray. Cukup tambahkan ekstensi.
SWIFT 3.0
CARA PENGGUNAAN
PERPANJANGAN
}
sumber
NSMutable...
tipe koleksi di Swift sama sekali. Ketik cast keNSMutable...
tidak akan pernah menghasilkan objek yang bisa berubah. Dan tipe yang tidak ditentukan dalam Swift 3+ adalahAny
, tidakAnyObject
.Detail
Larutan
Pemakaian
Sampel uji
Log uji
sumber
untuk swift 5, saya menulis demo untuk memverifikasinya.
sumber
sumber