繁体   English   中英

如何在iOS中正确解析JSON?

[英]How to parse json correctly in ios?

例如,我需要从JSON示例获取“ ex”范围的所有英语“文本”值,我该怎么做:

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

但是结果是我得到了两倍的质量,如果我打算得到所有“文本”,那么我将得到一个三重数组。 猜测应该是完成此任务的另一种更优雅的方法。 有谁能展示出一个非常好的解决方案?

如果您的表达式给出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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM