将纯字符串转换为JSON并返回Swift

时间:2017-02-12 12:32:42

标签: ios objective-c json swift

让我们说一下我从服务器获得的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;)但它太令人厌恶,无法成为真正的解决方案这个问题。

1 个答案:

答案 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对象。