【问题标题】:Swift JSON add new key to existing dictionarySwift JSON 向现有字典添加新键
【发布时间】:2015-05-01 02:20:19
【问题描述】:

我正在使用 Alamofire 和 SwiftyJSON 从 API 获取和管理数据 在提出我的初始请求后,我最终得到了 JSON 类型的嵌套集合

根据 SwiftyJSON,我可以像这样遍历数据 https://github.com/SwiftyJSON/SwiftyJSON#loop

for (key: String, subJson: JSON) in json {
   //Do something you want
}

再次,根据 SwiftyJSON,我应该能够像这样设置新值: https://github.com/SwiftyJSON/SwiftyJSON#setter

json["name"] = JSON("new-name")

我有一个嵌套的数据集合,可以深入挖掘,但我无法更改对象并设置新的键:值对。我将如何在 Swift 中做到这一点?

这是我的代码:

            for (key: String, stop: JSON) in stops {
                var physicalStops = stop["physicalStops"]
                for (key: String, physicalStop: JSON) in physicalStops {
                    println("Prints out \(physicalStop) just fine")
                   // physicalStop["myNewkey"] = "Somevalue" // DOES NOT WORK (@lvalue is not identical to 'JSON)
                   // physicalStop["myNewkey"] = JSON("Somevalue") //SAME Story
                }
            }

基本上,我想保持原始 JSON 对象的相同结构,但在每个子对象的第二级嵌套中添加额外的 key:value。

【问题讨论】:

    标签: json swift swifty-json


    【解决方案1】:

    首先,您可以在 for 循环中使用 var 使值在循环内可修改。但是,JSON 是结构,因此它表现为值类型,因此在您的嵌套示例中,您还必须将子 JSON 重新分配给父 JSON,否则它只会修改循环内的值,而不是原始结构中的值

    var json: JSON = ["foo": ["amount": 2], "bar": ["amount": 3]]
    for (key: String, var item: JSON) in json {
         println("\(key) -> \(item)")
         item["price"] = 10
         json[key] = item
    }
    println(json) 
    

    【讨论】:

      【解决方案2】:

      以下是在 Swift 2 Playground 中运行良好且不需要 Swifty 的代码:

      var json: [String:AnyObject] = ["foo": ["amount": 2], "bar": ["amount": 3]]
      for (key,item) in json {
           print("\(key) -> \(item)")
           let newItem = ["price": 10]
           json[key] = newItem
      }
      print(json)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2010-11-04
        • 2020-11-09
        • 2015-02-24
        相关资源
        最近更新 更多