2017-10-20 60 views
-4

我有一個JSON數組一樣,如何編碼jsonarray上雨燕4 IOS

[ 
    { 
     "value" : "temp", 
     "value2" : "temp2", 
     "value3" : "temp3", 
    }, 
    { 
     "value" : "temp"; 
     "value2" : "temp2", 
     "value3" : "temp3", 
    }, { 
     "value" : "temp", 
     "value2" : "temp2", 
     "value3" : "temp3", 
    } 
] 

我嘗試解析上迅速4 iOS應用。 我沒有找到關於這個問題的任何解決方案。 我已經嘗試了很多代碼像

let jsonpars = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! [AnyObject] 
+5

的字符串無效JSON。 – Aris

+0

請搜索:[有2700多個相關問題](https://stackoverflow.com/search?q=%5Bswift%5D+parse+JSON)。在Swift 4中,你可以使用['JSONDecoder'](https://developer.apple.com/documentation/foundation/jsondecoder) – vadian

+0

就像Aris說的那樣,這是錯誤的JSON格式,所以首先要解決的問題比我們能說的更好 – Ladislav

回答

0

您所提供的JSON是無效的。正確的JSON格式應該是這樣的:

  1. 更換的=每次出現:
  2. 用逗號

結果應該是這樣的替換每個;

[ 
    { 
     "value":"temp", 
     "value2":"temp2", 
     "value3":"temp3", 
    }, 
    ... 
] 

然後,您提供的解析代碼示例應該可以正常工作。

您的示例JSON看起來像解析後打印出來的內容。例如:

let jsonpars = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! [AnyObject] 

print(jsonpars) 

導致調試版本JSON輸出:

[{ 
    value = temp; 
    value2 = temp2; 
    value3 = temp3; 
}, { 
... 
] 

真正 JSON,要分析數據,必須有冒號和逗號。

0

使用quicktype,我產生這種模式和轉換代碼爲您的樣品(糾正語法問題後):

import Foundation 

struct Value: Codable { 
    let value, value2, value3: String 
} 

extension Array where Element == Value { 
    static func from(json: String, using encoding: String.Encoding = .utf8) -> [Value]? { 
     guard let data = json.data(using: encoding) else { return nil } 
     return [Value].from(data: data) 
    } 

    static func from(data: Data) -> [Value]? { 
     let decoder = JSONDecoder() 
     return try? decoder.decode([Value].self, from: data) 
    } 

    var jsonData: Data? { 
     let encoder = JSONEncoder() 
     return try? encoder.encode(self) 
    } 

    var jsonString: String? { 
     guard let data = self.jsonData else { return nil } 
     return String(data: data, encoding: .utf8) 
    } 
} 

然後你就可以反序列化這樣的:

let values = [Value].from(json: """ 
    [ 
     { 
      "value": "temp", 
      "value2": "temp2", 
      "value3": "temp3" 
     }, 
     { 
      "value": "temp", 
      "value2": "temp2", 
      "value3": "temp3" 
     }, 
     { 
      "value": "temp", 
      "value2": "temp2", 
      "value3": "temp3" 
     } 
    ] 
""")!