Reputation: 339
I have an array of SwiftyJson data that I have declared and filled it with data .The code I'm using to fill the hoge array is this : self.hoge = JSON(data: data!)
but I need to append new swiftyJSON data to this hoge array .I noticed hoge array doesn't have append property . How should I do that?
Thanks
Upvotes: 19
Views: 26196
Reputation: 1850
I needed to add a dictionary to the JSON data in my project. I added to Daniel Krom's answer above:
import SwiftyJSON
extension JSON {
mutating func appendIfKeyValuePair(key: String, value: Any){
if var dict = self.dictionaryObject {
dict[key] = value
self = JSON(dict)
}
}
}
Usage:
var data: JSON = []
data.appendIfKeyValuePair(key: "myKey", value: "myValue")
Upvotes: 0
Reputation: 699
Declare you main JSON Array as :
var data:[JSON] = []
If the data source is any other object (like realm) loop over it using for loop But if the data source is another JSON Array perform :
func setData(){
data = []
if let items = sourceData.array {
for item in items {
data.append(item)
}
}
collectionView.reloadData()
}
Upvotes: 2
Reputation: 10058
Another solution, using 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);
}
}
}
Use:
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))
print:
{
"myArray" : [
1,
2,
3,
4,
5
],
"myDictionary" : {
"B" : {
"key2" : "value2"
},
"A" : {
"key1" : "value1"
}
}
}
Upvotes: 9
Reputation: 3396
You can use the merge
function for this.
https://github.com/SwiftyJSON/SwiftyJSON#merging
var array: JSON = [1, 2, 3]
array = try! array.merged(with: [4])
// -> [1, 2, 3, 4]
Upvotes: 6
Reputation: 6934
let jsonNewJSON:JSON = JSON(newData)
var arr:[JSON]=jsonOBJ.arrayValue
arr.append(jsonNewJSON)
var combinedOBJ = JSON(arr)
I used the above code to append to a swiftyjson array . I first converted the new data to a JSON object. Then I got the array of the existing JSON and append the new JSON. I converted the array back to a JSON object. Admit-ably not great code, but I did not need performance here and it got the job done.
Upvotes: 5
Reputation: 51911
SwiftyJSON does not have append
or extend
functionality.
You can:
self.hoge = JSON(self.hoge.arrayObject! + JSON(data: newData).arrayObject!)
But I recommend to declare self.hoge
as [JSON]
var hoge:[JSON] = []
func readMoreData() {
let newData: NSData = ...
if let newArray = JSON(data:newData).array {
self.hoge += newArray
}
}
Upvotes: 21
Reputation: 13783
self.hoge
should be a Swift Array (which is mutable if declared as var) or casted to a NSMutableArray. If it is of Array type use append. If casted to an NSMutableArray use self.hoge.addObject(yourObject)
.
Upvotes: 0