让我们说一下我从服务器获得的JSON字符串:" \" 3 \"" (与引号,即长度== 3这里)
在Android世界中,我可以这样做:
gson.fromJson(json, new TypeToken<String>() {}.getType());
- 它返回&#34; 3&#34; (即长度== 1)
在C#-world中,可以使用NewtonSoft.Json:
JsonConvert.DeserializeObject<string>(json, settings)
- 它返回&#34; 3&#34; (即长度== 1)
反过来说,我确实有字符串我想序列化为JSON。
在Android中我执行gson.toJson("\"3\"")
和C# - JsonConvert.SerializeObject("\"3\"")
JSONSerialization的问题在于它不会将纯字符串视为有效的JSON:JSONSerialization.isValidJSONObject("\"3\"") == *false*
在Swift / Obj-C世界中有什么相同的东西?
我发现的丑陋的解决方法(除了添加/删除引号之外)到目前为止是将字符串换行为1项数组以使JSONSerialization
满意,然后删除&#34; [&#34;,&#34;]&#34;从结果JSON字符串(以及其他方式 - 在反序列化之前添加&#34; [&#34;,&#34;]&#34;)但它太令人厌恶,无法成为真正的解决方案这个问题。
答案 0 :(得分:2)
反序列化没有数组的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
}
但是,似乎没有办法将序列化普通字符串转换为JSON
使用Foundation库中的JSONSerialization
类。
请注意,根据JSON specification, JSON对象是名称/值对(字典)或的集合 有序的值列表(数组)。单个字符串无效 JSON对象。