簡體   English   中英

將純字符串轉換為JSON然后在Swift中返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM