2015-05-24 6 views
5

मैं एक swiftyJSON उद्देश्य यह है कि उदाहरण के लिए की तरह लग रहा है:गठबंधन करने के लिए कैसे दो SwiftyJSON वस्तुओं

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

मैं इसे करने के लिए एक और swiftyJSON वस्तु संलग्न करने के लिए इतना है कि यह की तरह लग रहा सक्षम होना चाहते हैं:

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

मैं swiftyJSON ऑब्जेक्ट्स पर += या .append का उपयोग नहीं कर सकता। मैं यह कैसे कर सकता हूँ?

उत्तर

0

विक्टर का जवाब मेरे लिए काम नहीं करता था।

var data: [JSON] = [] 

और निम्नलिखित कोड का उपयोग कर:: लेकिन मैं इस तरह एक सरणी में मेरी JSON ऑब्जेक्ट, data, रख कर सवाल हल

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

जैसा कि आपने कहा था, swiftyJSON में एक संलग्न कार्यक्षमता नहीं है।

आप क्या कर सकते हैं swiftyJSON ऑब्जेक्ट्स को किसी भी प्रकार के ऑब्जेक्ट में पार्स करें और उन्हें संलग्न करें।

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

डाटा -> NSData वस्तु एक HTTP अनुरोध से प्राप्त किया।

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

मैं का जवाब पसंद आया @ user2215977, लेकिन मुझे नेस्टेड जेएसओएन के विलय की भी आवश्यकता थी। मैंने नेस्टेड जेएसओएन और सरणी को मर्ज करने के लिए एक्सटेंशन बढ़ाया, जबकि जेएसओएन युक्त सरणी विलय नहीं हुई हैं, लेकिन दोनों नए जेनरेट किए गए JSON की सरणी में हैं।

आयात 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 
    } 
} 

आदेश उपयोग मैं भी इस विस्तार के लिए मेरे परीक्षण पोस्ट करेंगे उदाहरण देकर स्पष्ट करने के लिए।

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) 
    } 
} 
संबंधित मुद्दे