ios - 将纯字符串转换为 JSON 并在 Swift 中返回

标签 ios objective-c json swift

假设我从服务器获得了一个 JSON 字符串:"\"3\""(带引号,即这里的长度 == 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 字符串中删除“[”,“]”(以及其他方式 - 在反序列化之前添加“[”,“]”),但这太恶心了,无法成为这个问题的真正解决方案。

最佳答案

反序列化没有数组或 字典作为顶级对象,您可以传递 .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 对象。

关于ios - 将纯字符串转换为 JSON 并在 Swift 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42187555/

相关文章:

iphone - 如何将数据附加到 iPhone 上的 Facebook 应用程序请求?

php - JSONkit、MySQL、iOS——如何?

ios - 以编程方式从 super View 中删除 View 后更新约束/框架(自动布局)

ios - 根据ISOCountryCode获取货币符号和货币代码

json - 编码 time.Time 到 unix 时间戳

c# - 不允许 httpclient 后异步返回方法 (405)

ios - 如何在操作表中进行多项选择和部分?

ios - 使用 Parse.com 未显示 Pins

ruby-on-rails-3 - 使用Jbuilder和Rails 3提高渲染性能

ios - UItableview 屏幕截图