2015-05-24 15 views
5

Tôi có một đối tượng swiftyJSON trông giống như ví dụ:Làm thế nào để kết hợp hai đối tượng SwiftyJSON

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

Tôi muốn để có thể nối thêm một đối tượng swiftyJSON với nó để nó trông giống như:

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

Tôi không thể sử dụng += hoặc .append trên các đối tượng swiftyJSON. Tôi có thể làm cái này như thế nào?

Trả lời

0

Câu trả lời của Victor không hiệu quả đối với tôi. Nhưng tôi đã giải quyết được câu hỏi bằng cách đặt đối tượng JSON của tôi, data, vào một mảng như thế này:

var data: [JSON] = [] 

và sử dụng đoạn mã sau:

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

Như bạn đã nói, swiftyJSON không có chức năng phụ thêm.

Những gì bạn có thể làm là phân tích cú pháp các đối tượng swiftyJSON thành một mảng kiểu anyObject và nối thêm chúng.

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

liệu -> NSData Object nhận được từ một yêu cầu 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

Tôi thích câu trả lời của @ user2215977, nhưng tôi cũng cần hợp nhất các JSON lồng nhau. Tôi mở rộng phần mở rộng để hợp nhất các JSON và mảng lồng nhau, trong khi các mảng chứa JSON không được hợp nhất, nhưng cả hai đều nằm trong mảng của JSON mới được tạo ra.

nhập khẩu 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 
    } 
} 

Để minh họa cho việc sử dụng tôi sẽ đăng các bài kiểm tra của tôi cho phần mở rộng này là tốt.

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) 
    } 
} 
Các vấn đề liên quan