2017-07-23 201 views
0

我正在將字典數組數組轉換爲字符串,但將其轉換回來證明非常具有挑戰性。建議?如何將字符串轉換爲字典數組的數組?

+1

*沒有使用json *但它看起來非常像JSON – vadian

+0

最簡單的解決方案是使用JSON。將原始數組轉換爲JSON字符串。然後將該JSON字符串轉換回原始數組很簡單。 – rmaddy

+0

爲什麼不使用'JSONSerialization'?它簡單易用。 (這裏有數百萬個例子)。順便說一句:你的代碼不是有效的JSON,因爲字典是用{}代表的,而集合的最後一個元素是**而不是**以逗號結尾。 – vadian

回答

3

[[String: Any]]不是「字典數組陣列」。這是一系列字典。下面是使用JSON的例子:

func toJSON(array: [[String: Any]]) throws -> String { 
    let data = try JSONSerialization.data(withJSONObject: array, options: []) 
    return String(data: data, encoding: .utf8)! 
} 

func fromJSON(string: String) throws -> [[String: Any]] { 
    let data = string.data(using: .utf8)! 
    guard let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) as? [AnyObject] else { 
     throw NSError(domain: NSCocoaErrorDomain, code: 1, userInfo: [NSLocalizedDescriptionKey: "Invalid JSON"]) 
    } 
    return jsonObject.map { $0 as! [String: Any] } 
} 

測試:

let array: [[String: Any]] = [ 
    [ 
     "firstName": "John", 
     "lastName": "Smith" 
    ], 
    [ 
     "make": "Ford", 
     "model": "Focus", 
     "year": 2016 
    ] 
] 

let str = try! toJSON(array: array) 
let array2 = try! fromJSON(string: str) 

print(array2) 

以JSON的關鍵是,你必須解碼一次在一個級別。

+0

是的,但你的代碼只顯示一個字典數組。您可以明顯地調整它以添加另一個「陣列層」 –

+0

您可以添加示例輸入和期望的輸出嗎?很難通過評論跟蹤你想要的內容。另外,您的手動JSON編碼不會生成有效的JSON –

+0

我的字符串格式不正確,但其中的數據是。正如在蘋果開發者文檔中所述,在HKWorkout上定製元數據存儲的主題......只支持NSString,NSNumber或NSDate對象作爲值。期。轉換例程是正確的,但我試圖存儲一個Tuple,幾個布爾和幾個定製結構。謝謝CD! –

相關問題