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

问题描述 投票:2回答:2

我正在研究一种向现有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"
        }
    }
}

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

有谁知道如何处理这个?

arrays json swift
2个回答
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"
    }
  }
}

0
投票

@ daniel-krom有权利,但是扩展是一个有点混乱的实现,所以,我们只需要在Swift控制器(或类)的末尾添加那些添加“append”方法的代码,没有别的。

使用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

我希望这可能有用

© www.soinside.com 2019 - 2024. All rights reserved.