在SwiftyJson中的方括号之前没有键解析数组?

时间:2018-01-10 09:02:26

标签: ios arrays swift swifty-json

从服务器获取国家/地区列表。服务器响应是这样的。

[
    {
        "CountryID": 2,
        "Name": "Afghanistan",
        "Code": "AFG",
        "CreatedDate": "2018-01-09T02:05:02.08"
    },
    {
        "CountryID": 3,
        "Name": "Aland Islands",
        "Code": "ALA",
        "CreatedDate": "2018-01-09T02:05:02.08"
    }
]

使用SwiftyJSON将响应转换为Json,就像这样。

if let value = response.result.value {
   let json = JSON(value)                        
   let countryListData = CountryList(fromJson: json)
   completionHandler(true, countryListData)
}

Country List类就是这样。

class CountryList {
    var countries: [Country]!
    init(fromJson json: JSON!) {
        let countryArray = json[0].arrayValue
        for countryJson in countryArray {
            let value = Country(fromJson: countryJson)
            countries.append(value)
        }
    }
}

class Country {
    var code : String!
    var countryID : Int!
    var createdDate : String!
    var name : String!
    init(fromJson json: JSON!){
        if json == nil{
            return
        }
        code = json["Code"].stringValue
        countryID = json["CountryID"].intValue
        createdDate = json["CreatedDate"].stringValue
        name = json["Name"].stringValue
    }
}

如何在SwiftyJson中的方括号之前解析没有键的数组?它没有正确地给出数组对象。

我知道这是以正常方式完成的,就像将响应转换为字典一样。但客户建议使用SwiftyJson。所以我只是在SwiftyJson中尝试这个。

给我一​​些建议,不要将此问题标记为重复。因为我没有从互联网上获得任何参考来使用SwiftyJson转换它。

2 个答案:

答案 0 :(得分:2)

班上的两个问题CountryList

class CountryList {
  // 1. the countries var is not initialized
  // var countries: [Country]!
  // Initialize it like below
  var countries = [Country]()
  init(fromJson json: JSON!) {
    // 2 issue is that json itself is an array so no need of doing json[0].arrayValue
    let countryArray = json.arrayValue
    for countryJson in countryArray {
      let value = Country(fromJson: countryJson)
      countries.append(value)
    }
  }
}

答案 1 :(得分:0)

我自己找到了答案。我将响应转换为NSArray,就像这样

class CountryList {
    var countries = [Country]()
    init(fromArray array: NSArray!) {
        for countryJson in array {
            let value = Country(fromJson: countryJson)
            countries.append(value)
        }
    }
}

class Country {
    var code : String!
    var countryID : Int!
    var createdDate : String!
    var name : String!
    init(fromJson json: JSON!){
        if json == nil{
            return
        }
        code = json["Code"].stringValue
        countryID = json["CountryID"].intValue
        createdDate = json["CreatedDate"].stringValue
        name = json["Name"].stringValue
    }
}

并像这样更改了CountryList类

import itertools

l = (list(i) for i in itertools.product(tuple(range(2)), repeat=3) if tuple(reversed(i)) >= tuple(i))
print list(l)

现在它的工作符合我的预期。感谢您的所有意见和回答。