如何在ios中正确解析json?

Posted

技术标签:

【中文标题】如何在ios中正确解析json?【英文标题】:How to parse json correctly in ios? 【发布时间】:2017-04-08 19:00:53 【问题描述】:

例如,我需要从JSON example 获取“ex”范围的所有英文“text”值 我做什么:

let result = json["def"].arrayValue.map( $0["tr"].arrayValue.map  $0["ex"]  )

但结果我得到了一个双倍的质量,如果我打算得到所有“文本”,那么我将得到一个三元组。猜想应该是完成这项任务的另一种更优雅的方法。有没有人可以提出一个非常好的解决方案?

【问题讨论】:

问题是你并没有真正解析。您正在尝试对未解析的数据执行一些操作。为了简化您的代码,首先创建对象并将数据解析为对象。一旦有了对象,代码就会变得更简单,而且类型也很安全。 【参考方案1】:

如果您的表达式给出了 3 个字符串数组,您可以在末尾添加 .reduce([], +) 以将 3 个数组加入 一个。

编辑:

我是凭记忆打字,说错话了。你会使用reduce,而不是join。

let result = json["def"]
  .arrayValue
  .map( $0["tr"].arrayValue.map  $0["ex"]  )
  .reduce([], +)

这应该会给你你想要的。

编辑#2:

reduce 函数对序列(如数组)进行操作。它需要一个“初始结果”值作为进程的种子,然后是一个对 2 个元素进行操作并返回结果的闭包。 (“二进制”闭包) + 运算符实际上是 Swift 中的二进制闭包。它需要 2 个元素并返回一个结果,因此您可以简单地传入 + 而不是闭包。对于数组,+ 返回组合数组的结果。

因此,当您对数组数组使用 reduce() 并将 [] 作为初始结果时,它将 [] 与第一个数组组合,然后将每个 + 运算符的结果与数组。

以这个简化的代码为例:

//Start with an array of arrays of strings
let arrays = [
  ["string1", "string2", "string3"],
  ["string4", "string5", "string6"],
  ["string7", "string8", "string9"]
]

//First loop through the outer arrays and log their contents
for (index, object) in arrays.enumerated() 
  print("array[\(index)] = \(object)")


//Now combine the outer arrays into a single array
let combined = arrays.reduce([], + )

//Now print the entries in the combined array
print("\n---- combined arrays ----")
for (index, object) in combined.enumerated() 
  print("array[\(index)] = \(object)")

产生以下输出:

array[0] = ["string1", "string2", "string3"]
array[1] = ["string4", "string5", "string6"]
array[2] = ["string7", "string8", "string9"]

---- combined arrays ----
array[0] = string1
array[1] = string2
array[2] = string3
array[3] = string4
array[4] = string5
array[5] = string6
array[6] = string7
array[7] = string8
array[8] = string9

【讨论】:

我猜你的意思是.joined() 我不明白如何使用joined() 方法,但我做了这个'let temp = json["def"].arrayValue.map( $0["tr"].arrayValue. map $0["ex"].arrayValue.map $0["text"].stringValue ) 让 res = temp.flatMap $0 .flatMap $0 ' 其实我是凭记忆打字,记错了。我打算建议的运算符是减少。请参阅我的答案的编辑。

以上是关于如何在ios中正确解析json?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中解析json

如何在 IOS 上使用 Swift 解析 JSON,从 PHP 服务脚本发送?

JSON 解析返回 null 到 iOS(json 字符串看起来正确)

AFNetworking iOS JSON 解析仅在黎巴嫩不正确

如何将整数值解析为 Json iOS?

如何在 iOS 中解析 json