如何将新数据追加到现有的JSON数组(SwiftyJSON)

18

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

但是我需要将新的SwiftyJSON数据添加到这个hoge数组中。我注意到hoge数组没有append属性。我该如何做呢?

谢谢。


@adnan 我已经这样声明了hoge var hoge:JSON = [],但是当我将它的类型更改为NSMutableArray时,我收到了一个错误,说JSON不能转换为NSMutableArray。我做错了什么吗?谢谢。 - user970956
我同意,我认为swiftyJSON可以有更加用户友好的文档:> - user798719
7个回答

20

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

谢谢,它运行得很好,并向hoge添加了新数据。唯一剩下的问题是我以前像这样从hoge返回数据 self.hoge[indexPath.row]["cars"]["pic_name"],但现在我收到错误消息说无法索引空缓冲区。现在我该如何返回数据?再次感谢 - user970956
3
尝试过,但是 += 运算符似乎不能用于 JSON 对象。如果我错了,请纠正我。 - Yuichi Kato

9

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"
    }
  }
}

但是它没有保存...编译时启用了优化 - 调试可能会表现奇怪; 变量可能无法使用。出现错误,关闭应用程序后,没有任何变化。 - Dumitru Rogojinaru
@DumitruRogojinaru 我没有在Swift 3上测试过,所以我猜有些东西已经改变了,我会在接下来的几天内更新我的答案。 - Daniel Krom

6

5
let jsonNewJSON:JSON = JSON(newData)
var arr:[JSON]=jsonOBJ.arrayValue
arr.append(jsonNewJSON)
var combinedOBJ = JSON(arr)

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

2

将主要的 JSON 数组声明为:

var data:[JSON] = []

如果数据源是其他对象(比如realm),请使用for循环遍历它。 但如果数据源是另一个JSON数组,则执行以下操作:
func setData(){
        data = []
        if let items = sourceData.array {
            for item in items {
              data.append(item)
            }
        }
        collectionView.reloadData()
    }

0

我需要在我的项目中向JSON数据添加一个字典。我已经添加到Daniel Krom的答案上面

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")

0

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


我已经这样声明了hoge:var hoge:JSON = []。我该如何修改它?我试图将其转换为NSMutableArray,但出现了一个错误,即JSON无法转换为NSMutableArray。你能帮我解决这个问题吗?谢谢。 - user970956
声明为 hoge = [JSON](). - Nikos M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接