Bagaimana untuk membuat atau mengkonversi Swift objek JSON?
Di bawah ini kelas
class User: NSManagedObject {
@NSManaged var id: Int
@NSManaged var name: String
}
Perlu dikonversi ke
{
"id" : 98,
"name" : "Jon Doe"
}
Saya mencoba secara manual lewat objek untuk fungsi yang menetapkan variabel-variabel ke dalam sebuah kamus dan pengembalian kamus. Tapi aku akan ingin cara yang lebih baik untuk mencapai hal ini.
64
8
Di Swift 4, anda dapat mewarisi dari
Codable
jenis.Selain Swift 4 (Foundation) sekarang itu adalah native didukung di kedua cara, JSON string ke objek - objek JSON string. Silahkan lihat Apple's dokumentasi di sini JSONDecoder() dan di sini JSONEncoder()
String JSON ke Object
Swift Objek untuk JSONString
Anda dapat menemukan semua rincian dan contoh-contoh berikut ini Panduan Ultimate untuk Parsing JSON Dengan Cepat 4
UPDATE:
Codable
protokol diperkenalkan di Swift 4 harus cukup untuk sebagian besarJSON
parsing kasus. Di bawah ini jawabannya adalah untuk orang-orang yang terjebak di versi sebelumnya dari Swift dan untuk alasan warisan[EVReflection][1] :
NSDictionary
,majic jungle software
,Dicetak
,Hashable
danEquatable
Contoh:
[ObjectMapper][2] :
Contoh:
Saya bekerja sedikit lebih kecil solusi yang doesn't membutuhkan warisan. Tapi itu belum't telah diuji banyak. It's cukup jelek atm.
https://github.com/peheje/JsonSerializerSwift
Anda dapat lulus ke sebuah taman bermain untuk menguji itu. E. g. berikut struktur kelas:
cetakan
Ini bukan pilihan/solusi otomatis tapi saya percaya ini adalah idiomatic dan asli cara untuk melakukan hal tersebut. Dengan cara ini anda don't perlu setiap perpustakaan atau seperti.
Membuat sebuah protokol seperti:
Kemudian menerapkannya di kelas anda seperti:
Sekarang:
Catatan: jika anda ingin
json
sebagai string, hal ini sangat sederhana untuk mengkonversi string:String(data: json, encoding .utf8)
Beberapa hal di atas jawaban yang benar-benar baik-baik saja, tapi aku menambahkan ekstensi di sini, hanya untuk membuatnya lebih mudah dibaca dan digunakan.
//Cetak ini akan seperti berikut:
Tidak yakin jika lib/framework yang ada, tapi jika anda ingin melakukannya secara otomatis dan anda akan ingin menghindari tenaga kerja manual :-) tetap dengan
MirrorType
...Menganggapnya sebagai kasar contoh, kurang tepat konversi dukungan, kekurangan rekursi, ... Itu's hanya
MirrorType
demonstrasi ...P. S. Berikut ini's dilakukan di
U
, tapi anda're akan meningkatkanNSManagedObject
dan kemudian anda'akan dapat mengkonversi semuaNSManagedObject
subclass. Tidak perlu untuk menerapkan ini dalam semua subclass/dikelola benda-benda.biarkan user = user("1","pawan")