如何将新数据附加到现有 JSON 数组(swiftyJSON)

How to append new data to an existing JSON array(swiftyJSON)

我有一个 SwiftyJson 数据数组,我已经声明并用数据填充它。我用来填充 hoge 数组的代码是这样的:self.hoge = JSON(data: data!)

但我需要将新的 swiftyJSON 数据附加到这个 hoge 数组。我注意到 hoge 数组没有附加 属性。我该怎么做?

谢谢

self.hoge 应该是一个 Swift 数组(如果声明为 var,它是可变的)或转换为 NSMutableArray。如果是 Array 类型,则使用 append。如果转换为 NSMutableArray 使用 self.hoge.addObject(yourObject).

SwiftyJSON 没有 appendextend 功能。

您可以:

self.hoge = JSON(self.hoge.arrayObject! + JSON(data: newData).arrayObject!)

但我建议将 self.hoge 声明为 [JSON]

var hoge:[JSON] = []

func readMoreData() {

    let newData: NSData = ...

    if let newArray = JSON(data:newData).array {
        self.hoge += newArray
    }
}

Swift 2-4

另一个解决方案,使用Extension

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);
        }
    }
}

使用:

var myJSON: JSON = [
    "myDictionary": [String:AnyObject](),
    "myArray" : [1,2,3,4]
]

myJSON["myDictionary"].appendIfDictionary(key:"A", json: JSON(["key1":"value1"]))
myJSON["myDictionary"].appendIfDictionary(key: "B", json: JSON(["key2":"value2"]))
myJSON["myArray"].appendIfArray(json: JSON(5))

打印:

{
  "myArray" : [
    1,
    2,
    3,
    4,
    5
  ],
  "myDictionary" : {
    "B" : {
      "key2" : "value2"
    },
    "A" : {
      "key1" : "value1"
    }
  }
}
let jsonNewJSON:JSON = JSON(newData)
var arr:[JSON]=jsonOBJ.arrayValue
arr.append(jsonNewJSON)
var combinedOBJ = JSON(arr)

我使用上面的代码附加到一个 swiftyjson 数组。我首先将新数据转换为 JSON 对象。然后我得到现有 JSON 的数组并附加新的 JSON。我将数组转换回 JSON 对象。诚然,这不是很好的代码,但我不需要这里的性能,它完成了工作。

您可以为此使用 merge 函数。 https://github.com/SwiftyJSON/SwiftyJSON#merging

var array: JSON = [1, 2, 3]
array = try! array.merged(with: [4])
// -> [1, 2, 3, 4]

将您的主要 JSON 数组声明为 :

var data:[JSON] = []

如果数据源是任何其他对象(如领域),则使用 for 循环对其进行循环 但是如果数据源是另一个JSON数组执行:

func setData(){
        data = []
        if let items = sourceData.array {
            for item in items {
              data.append(item)
            }
        }
        collectionView.reloadData()
    }

我需要向项目中的 JSON 数据添加字典。我添加到 Daniel Krom's answer :

import SwiftyJSON

extension JSON {
    
    mutating func appendIfKeyValuePair(key: String, value: Any){
        if var dict = self.dictionaryObject {
            dict[key] = value
            self = JSON(dict)
        }
    }
}

用法:

var data: JSON = []

data.appendIfKeyValuePair(key: "myKey", value: "myValue")