2017-03-04 52 views
0

雨燕3.0的iOS 10.x的SwiftyJSON在SwiftyJSON陣列刪除字典記錄

我已經字典對象的SwiftyJSON陣列看起來像這樣...

[ 
    { 
    "figure" : 1326, 
    "account" : "Charles" 
    } 
    { 
    "figure" : 2361, 
    "account" : "James" 
    } 
] 

我想刪除的記錄其中屬於「詹姆斯」,我想出了這個代碼。 jsonObjects包含你在上面看到的數組。

var json2S = sharedDataAccess.jsonObjects 

    for json2DX in 0..<json2S.count { 
     var delIndex: Int? = nil 
     for (jsonK, subJson) in sharedDataAccess.jsonObjects[json2DX] { 

      print("json2D \(jsonK) \(subJson.stringValue) \(Name)") 
      if jsonK == "account" && subJson.stringValue != Name { 
       delIndex = json2DX 
       print("DELETE IT \(jsonK) \(subJson.stringValue) \(Name)") 
      } 
     } 
     if delIndex != nil { 
      json2S[0].arrayObject?.remove(at: delIndex!) 
      print("DELETING IT \(delIndex) \(Name)") 
     } 
    } 

    sharedDataAccess.jsonObjects = JSON(json2S) 

它的工作,但不是我希望的方式。它刪除了James [假設Name變量包含James],但它使我留下了這個。

[ 
    null, 
    { 
    "figure" : 1326, 
    "account" : "Charles" 
    } 
] 

詹姆斯被替換爲空......空我不想,我怎麼能刪除條目,但沒有得到一個空或確實只是刪除空太!

+3

基本上不要誤用SwiftJSON作爲集合類型。 SwiftyJSON將'nil'值視爲'NSNull'就像JSON一樣。將JSON解析爲標準集合類型「Array」和「Dictionary」並更改它們。 – vadian

+0

公平點;我會重新編碼這個。 – user3069232

回答

0

好的,這是我的答案。發佈它的好辦法;不完全相同的邏輯,但遵循Vadian的觀點。

var json2S = sharedDataAccess.jsonObjects 

    var jsonA:[[String:Any]] = [] 
    for json2P in sharedDataAccess.jsonObjects { 
     print("json2P \(json2P)") 
     var jsonDict:[String:Any] = [:] 
     var json2Save = false 
     for (jsonK, subJson) in json2P { 
      print("jsonK \(jsonK) \(subJson.stringValue) \(fnName)") 
      jsonDict[jsonK] = subJson.stringValue 
      if jsonK == "account" && subJson.stringValue == fnName { 
       json2Save = true 
      } 
     } 
     if json2Save { 
      jsonA.append(jsonDict) 
     } 
    } 

    let sharedDataAccess.jsonObjects = JSON(jsonA)