簡體   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