[英]Convert plain string to JSON and back in Swift
假設有一個我從服務器獲取的JSON字符串: “ \\“ 3 \\”” (帶引號,即length == 3)
在Android世界中,我可以執行以下操作:
gson.fromJson(json, new TypeToken<String>() {}.getType());
-返回“ 3” (即,長度== 1)
在C#世界中,可以使用NewtonSoft.Json:
JsonConvert.DeserializeObject<string>(json, settings)
-它返回“ 3” (即,長度== 1)
以及其他方法,我確實有要序列化為JSON的字符串。 在Android中,我將執行gson.toJson("\\"3\\"")
,在C#中JsonConvert.SerializeObject("\\"3\\"")
JSONSerialization的問題在於,它不會將純字符串視為有效的JSON: JSONSerialization.isValidJSONObject("\\"3\\"") == *false*
在Swift / Obj-C世界中什么等效?
到目前為止,我發現的丑陋的解決方法 (除了僅添加/刪除引號外)是將字符串包裝到1-item-array中以使JSONSerialization
滿意,然后從結果JSON-string中刪除“ [“,”]“(以及其他解決方法-在反序列化之前添加“ [”,“]”),但這實在令人厭惡,無法真正解決此問題。
在將沒有數組或字典作為頂級對象的JSON反序列化時,您可以傳遞.allowFragments
選項:
let jsonString = "\"3\""
let jsonData = jsonString.data(using: .utf8)!
let json = try! JSONSerialization.jsonObject(with: jsonData, options: .allowFragments)
if let str = json as? String {
print(str) // 3
}
但是,似乎沒有辦法使用Foundation庫中的JSONSerialization
類將純字符串序列化為 JSON。
請注意,根據JSON規范 ,JSON對象是名稱/值對(字典)或值的有序列表(數組)的集合。 單個字符串不是有效的JSON對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.