คำถามติดแท็ก codable

13
อาร์เรย์ถอดรหัส Swift JSONDecode ล้มเหลวหากการถอดรหัสองค์ประกอบเดียวล้มเหลว
ในขณะที่ใช้โปรโตคอล Swift4 และ Codable ฉันพบปัญหาต่อไปนี้ - ดูเหมือนว่าจะไม่มีทางอนุญาตให้JSONDecoderข้ามองค์ประกอบในอาร์เรย์ได้ ตัวอย่างเช่นฉันมี JSON ต่อไปนี้: [ { "name": "Banana", "points": 200, "description": "A banana grown in Ecuador." }, { "name": "Orange" } ] และโครงสร้างCodable : struct GroceryProduct: Codable { var name: String var points: Int var description: String? } เมื่อถอดรหัส json let decoder = JSONDecoder() …
117 arrays  json  swift  swift4  codable 

7
ด้วย JSONDecoder ใน Swift 4 คีย์ที่หายไปสามารถใช้ค่าเริ่มต้นแทนที่จะต้องเป็นคุณสมบัติเสริมได้หรือไม่
Swift 4 เพิ่มCodableโปรโตคอลใหม่ เมื่อฉันใช้JSONDecoderดูเหมือนว่าต้องการให้คุณสมบัติที่ไม่ใช่ทางเลือกทั้งหมดของCodableคลาสของฉันมีคีย์ใน JSON มิฉะนั้นจะเกิดข้อผิดพลาด การทำให้ทุกคุณสมบัติของคลาสของฉันเป็นทางเลือกดูเหมือนจะเป็นเรื่องยุ่งยากโดยไม่จำเป็นเนื่องจากสิ่งที่ฉันต้องการจริงๆคือการใช้ค่าใน json หรือค่าเริ่มต้น (ฉันไม่ต้องการให้คุณสมบัติเป็นศูนย์) มีวิธีทำไหม? class MyCodable: Codable { var name: String = "Default Appleseed" } func load(input: String) { do { if let data = input.data(using: .utf8) { let result = try JSONDecoder().decode(MyCodable.self, from: data) print("name: \(result.name)") } } catch { print("error: \(error)") …
114 json  swift  swift4  codable 

13
วิธีถอดรหัสคุณสมบัติด้วยประเภทของพจนานุกรม JSON ในโปรโตคอลที่ถอดรหัสได้ Swift [45]
สมมติว่าฉันมีCustomerประเภทข้อมูลที่มีmetadataคุณสมบัติที่สามารถมีพจนานุกรม JSON ในออบเจ็กต์ของลูกค้าได้ struct Customer { let id: String let email: String let metadata: [String: Any] } { "object": "customer", "id": "4yq6txdpfadhbaqnwp3", "email": "john.doe@example.com", "metadata": { "link_id": "linked-id", "buy_count": 4 } } metadataคุณสมบัติสามารถใด ๆ โดยพล JSON แผนที่วัตถุ ก่อนที่ฉันจะสามารถแคสต์คุณสมบัติจาก JSON ที่ไม่กำหนดค่าซีเรียลจากNSJSONDeserializationแต่ด้วยDecodableโปรโตคอลSwift 4 ใหม่ฉันยังไม่สามารถคิดวิธีที่จะทำเช่นนั้นได้ มีใครรู้วิธีที่จะบรรลุสิ่งนี้ใน Swift 4 พร้อมโปรโตคอล Decodable หรือไม่?
114 json  swift  swift4  codable 

6
วิธีแยกคุณสมบัติออกจาก Codable ของ Swift 4
ใหม่Encodable/ Decodableโปรโตคอลของ Swift 4 ทำให้การจัดลำดับ JSON (de) ค่อนข้างน่าพอใจ อย่างไรก็ตามฉันยังไม่พบวิธีที่จะควบคุมได้อย่างละเอียดว่าคุณสมบัติใดควรเข้ารหัสและควรถอดรหัสคุณสมบัติใด ฉันสังเกตเห็นว่าการยกเว้นทรัพย์สินจากCodingKeysenum ที่มาพร้อมกันนั้นไม่รวมคุณสมบัติจากกระบวนการทั้งหมด แต่มีวิธีใดที่จะควบคุมได้ละเอียดกว่านี้
112 json  swift  codable 

17
ฉันจะใช้ Swift's Codable เพื่อเข้ารหัสลงในพจนานุกรมได้อย่างไร
ฉันมีโครงสร้างที่ดำเนิน Swift Codable4 มีวิธีง่ายๆในการเข้ารหัสโครงสร้างนั้นในพจนานุกรมหรือไม่? let struct = Foo(a: 1, b: 2) let dict = something(struct) // now dict is ["a": 1, "b": 2]
110 swift  swift4  codable 

4
ฉันจะใช้คีย์แบบกำหนดเองกับโปรโตคอลถอดรหัสได้ของ Swift 4 ได้อย่างไร
Swift 4 เปิดตัวรองรับการเข้ารหัสและถอดรหัส JSON แบบเนทีฟผ่านDecodableโปรโตคอล ฉันจะใช้คีย์ที่กำหนดเองสำหรับสิ่งนี้ได้อย่างไร เช่นบอกว่าฉันมีโครงสร้าง struct Address:Codable { var street:String var zip:String var city:String var state:String } ฉันสามารถเข้ารหัสสิ่งนี้เป็น JSON let address = Address(street: "Apple Bay Street", zip: "94608", city: "Emeryville", state: "California") if let encoded = try? encoder.encode(address) { if let json = String(data: encoded, encoding: .utf8) { …
105 json  swift  swift4  codable 

6
จะถอดรหัสโครงสร้าง JSON ที่ซ้อนกันด้วยโปรโตคอล Swift Decodable ได้อย่างไร
นี่คือ JSON ของฉัน { "id": 1, "user": { "user_name": "Tester", "real_info": { "full_name":"Jon Doe" } }, "reviews_count": [ { "count": 4 } ] } นี่คือโครงสร้างที่ฉันต้องการบันทึกไว้ (ไม่สมบูรณ์) struct ServerResponse: Decodable { var id: String var username: String var fullName: String var reviewCount: Int enum CodingKeys: String, CodingKey { case id, // …
94 json  swift  swift4  codable 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.