SwiftyJSON将新数据附加到现有JSON数组

时间:2015-07-31 12:14:52

标签: arrays json swift

我正在研究将新JSON数据添加到现有JSON数组的方法:

var resources: JSON = [
    "resources": []
]

override func viewDidLoad() {
    super.viewDidLoad()

    getApiResourceA() { responseObject, error in
        var resourceA: JSON = [
            "resourceA": []
        ]

        let resourceAResponseObject = JSON(responseObject!)
        resourceA["resourceA"] = resourceAResponseObject
        self.resources["resources"] = resourceA
    }

    getApiResourceB() { responseObject, error in
        var resourceB: JSON = [
            "resourceB": []
        ]

        let resourceBResponseObject = JSON(responseObject!)
        resourceB["resourceB"] = resourceBResponseObject
        self.resources["resources"] = resourceB
    }
}

我想要的结构是:

{
    "resources": {
        "resourceA": {
            "id": 1
            "name": "Name1"
        }
        "resourceB": {
            "id": 2
            "name": "Name2"
        }
    }
}

但是在我的代码中有两个不同的“资源” - 阵列创建......

任何人都知道如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

首先,必须了解JSONStruct表示每次传递或使用它时都会重复。

另一个问题是,您将资源声明为Array而不是Dictionary表示您可以使用resource作为密钥。

声明扩展名:

extension JSON{
    mutating func appendIfArray(json:JSON){
        if var arr = self.array{
            arr.append(json)
            self = JSON(arr);
        }
    }

    mutating func appendIfDictionary(key:String,json:JSON){
        if var dict = self.dictionary{
            dict[key] = json;
            self = JSON(dict);
        }
    }
}

使用:

//notice the change [String:AnyObject]
var resources: JSON = [
    "resources": [String:AnyObject](),
]

resources["resources"].appendIfDictionary("resourceA", json: JSON(["key1":"value1"]))
resources["resources"].appendIfDictionary("resourceB", json: JSON(["key2":"value2"]))

结果:

{
  "resources" : {
    "resourceB" : {
      "key2" : "value2"
    },
    "resourceA" : {
      "key1" : "value1"
    }
  }
}

答案 1 :(得分:0)

@ daniel-krom有权利,但是扩展有点令人困惑,因此,我们只需要在Swift控制器(或类)的末尾添加添加"追加"方法,没别的。

使用appendIfArray方法,我可以从这个

传递
[
  {
    "id_usuario" : 2
  }
]

...到此

[
  {
    "id_usuario" : 2
  },
  {
    "id_usuario" : 111
  },
  {
    "id_usuario" : 112
  },
  {
    "id_usuario" : 113
  }
]

完整的代码如下:

do{
    try json2!["usuarios"][indice]["fotos"][0]["me_gusta"].appendIfArray(json: JSON( ["id_usuario": 111] ))
    try json2!["usuarios"][indice]["fotos"][0]["me_gusta"].appendIfArray(json: JSON( ["id_usuario": 112] ))
    try json2!["usuarios"][indice]["fotos"][0]["me_gusta"].appendIfArray(json: JSON( ["id_usuario": 113] ))
}catch {
    print("Error")
}

完整的JSON结构可以在

中找到

http://jsoneditoronline.org/?id=56988c404dcd3c8b3065a583f9a41bba

我希望这可能有用