2015-05-24 16 views
5

ich ein swiftyJSON Objekt, das wie zum Beispiel aussieht:Wie kombinieren zwei SwiftyJSON Objekte

[{ 
    "location" : "http://...", 
    "img" : "http://...", 
    "commentCount" : 0, 
    "timestamp" : 1432460217550, 
}] 

Ich möchte eine andere swiftyJSON Objekt, um es anzufügen können, so dass es wie folgt aussieht:

[{ 
    "location" : "http://...", 
    "img" : "http://...", 
    "commentCount" : 0, 
    "timestamp" : 1432460217550, 
}, 
{ 
    "location" : "http://...", 
    "img" : "http://...", 
    "commentCount" : 1, 
    "timestamp" : 1432460217571, 
} 
] 

Ich kann += oder .append auf SwiftyJSON Objekte nicht verwenden. Wie kann ich das machen?

Antwort

0

Victors Antwort funktionierte nicht für mich. Aber ich löste die Frage nach meinem JSON-Objekt setzen, data, in ein Array wie folgt aus:

var data: [JSON] = [] 

und mit dem folgenden Code:

self.data = self.data + JSON["content"].arrayValue 
8

Wie Sie gesagt haben, hat swiftyJSON keine Append-Funktionalität.

Sie können die swiftyJSON-Objekte in ein Array vom Typ anyObject analysieren und anhängen.

let json = JSON(data: data!) 
var JSONObject = JSON(json["content"].arrayObject! + json["content"].arrayObject!) 

Daten -> NSData Objekt erhalten von einer HTTP-Anforderung.

4
extension JSON { 
    mutating func merge(other: JSON) { 
     for (key, subJson) in other { 
      self[key] = subJson 
     } 
    } 

    func merged(other: JSON) -> JSON { 
     var merged = self 
     merged.merge(other: other) 
     return merged 
    } 
} 
2

mochte ich die Antwort von @ user2215977, aber ich brauchte auch verschachtelte JSONs zusammenzuführen. Ich habe die Erweiterung erweitert, um verschachtelte JSONs und Arrays zusammenzuführen, während Arrays, die JSONs enthalten, nicht zusammengeführt werden, sondern sich beide im Array des neu generierten JSON befinden.

Import SwiftyJSON

extension JSON { 
    mutating func merge(other: JSON) { 
     if self.type == other.type { 
      switch self.type { 
       case .dictionary: 
        for (key, _) in other { 
         self[key].merge(other: other[key]) 
        } 
       case .array: 
        self = JSON(self.arrayValue + other.arrayValue) 
       default: 
        self = other 
      } 
     } else { 
      self = other 
     } 
    } 

    func merged(other: JSON) -> JSON { 
     var merged = self 
     merged.merge(other: other) 
     return merged 
    } 
} 

Um die Verwendung zu veranschaulichen auch ich meine Tests für diese Erweiterung veröffentlichen werde.

import XCTest 
import SwiftyJSON 

class JSONTests: XCTestCase { 
    func testPrimitiveType() { 
     let A = JSON("a") 
     let B = JSON("b") 
     XCTAssertEqual(A.merged(other: B), B) 
    } 

    func testMergeEqual() { 
     let json = JSON(["a": "A"]) 
     XCTAssertEqual(json.merged(other: json), json) 
    } 

    func testMergeUnequalValues() { 
     let A = JSON(["a": "A"]) 
     let B = JSON(["a": "B"]) 
     XCTAssertEqual(A.merged(other: B), B) 
    } 

    func testMergeUnequalKeysAndValues() { 
     let A = JSON(["a": "A"]) 
     let B = JSON(["b": "B"]) 
     XCTAssertEqual(A.merged(other: B), JSON(["a": "A", "b": "B"])) 
    } 

    func testMergeFilledAndEmpty() { 
     let A = JSON(["a": "A"]) 
     let B = JSON([:]) 
     XCTAssertEqual(A.merged(other: B), A) 
    } 

    func testMergeEmptyAndFilled() { 
     let A = JSON([:]) 
     let B = JSON(["a": "A"]) 
     XCTAssertEqual(A.merged(other: B), B) 
    } 

    func testMergeArray() { 
     let A = JSON(["a"]) 
     let B = JSON(["b"]) 
     XCTAssertEqual(A.merged(other: B), JSON(["a", "b"])) 
    } 

    func testMergeNestedJSONs() { 
     let A = JSON([ 
      "nested": [ 
       "A": "a" 
      ] 
     ]) 

     let B = JSON([ 
      "nested": [ 
       "A": "b" 
      ] 
     ]) 

     XCTAssertEqual(A.merged(other: B), B) 
    } 
}