【问题标题】:Using SwiftyJSON for subarray with Swift 3.1将 SwiftyJSON 用于 Swift 3.1 的子数组
【发布时间】:2017-05-20 18:14:34
【问题描述】:

我有一个 json 数据。我以前从未使用过 SwiftyJSON。我是第一次尝试。

我的 json 是这样的:

[
{
  "Id": 1,
  "Name": "A",
  "SubNames": [
  {
    "SubId": 1,
    "SubName": "A1"
  },
  {
    "SubId": 2,
    "SubName": "A2"
  }]
},
{
  "Id": 2,
  "Name": "B",
  "SubNames": [
  {
    "SubId": 1,
    "SubName": "B1"
  },
  {
    "SubId": 2,
    "SubName": "B2"
  }]
}
]

我可以处理名称并附加一个数组。但我无法处理子名称。我尝试了一些东西,但不幸的是没有用。我想将 SubNames 附加一个数组。这个数组会是这样的:

[["A1","A2"],["B1","B2"]]

我使用这个代码:

let json = JSON(data: data!)
for (_,subJson):(String, JSON) in json {                
self.names.append(subJson["Name"].stringValue
}

【问题讨论】:

  • 使用 swiftyjson 显示你为这个 json 结构准备的模型。
  • @AnilKumar 我编辑了我的问题。这够了吗?谢谢。
  • @AnilKumar 对不起,我不明白你能解释一下吗?
  • 你应该为此创建两个模型,一个模型包含“Id”:intType,“Name”:stringType,“SubNames”:[subNames],另一个是包含“SubId”的subNames : intType, "SubName": stringType
  • @AnilKumar 谢谢你的解释。我没有使用之前的模型,因此我不知道如何使用。如果你有时间可以给我看看吗?或者你可以给我一个源链接?

标签: json swift swifty-json


【解决方案1】:

试试这个来访问那些字段,你不应该在这里做data!

guard let `data` = data else {
    //no data handling
    return 
}
let dataArray = JSON(data: data).arrayValue
var arrayOfAllSubnames: [[String]] = [[]]

for object in dataArray {
    var arrayOfSubnames: [String] = []
    if let subnames = object["SubNames"].array {
        for subname in subnames {
            //here you get `"SubId": 2, "SubName": "B2"` object
            let subnameValue = subname["SubName"].stringValue
            arrayOfSubnames.append(subnameValue)
        }
    }
    arrayOfAllSubnames.append(arrayOfSubnames)
}

【讨论】:

  • 谢谢。但我的问题集中在数组 SubName 中,如下所示:[["A1","A2"],["B1","B2"]]
【解决方案2】:

Swift 3.0

1) 首先声明子名称数组。

var subNameArray: [[String]] = []

2) 您可以访问和存储这些对象,如下所示。

let json = JSON(data: data!).arrayValue

for item in json {

   var tempArray: [String] = []

   let name = item["Name"].stringValue

   for subNameItem in items["SubNames"].arrayValue {
     tempArray.append(subNameItem["SubName"].stringValue)
   } 
  subNameArray.append(tempArray)
}

【讨论】:

  • 谢谢,但首先@JuicyFruit 回答了。我会接受他的,对不起。
  • 不是问题,很高兴您得到了最终答案。继续提问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多