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

Posted

技术标签:

【中文标题】在 SwiftyJson 中的方括号之前解析没有键的数组?【英文标题】:Parse the array without a key before the square brackets in SwiftyJson? 【发布时间】:2018-01-10 09:02:26 【问题描述】:

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

[
    
        "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 进行转换。

【问题讨论】:

在方括号前没有键的解析数组是什么意思? 尝试将 json[0].arrayValue 替换为 json.arrayValue @PrashantTukadiya - 感谢您的快速回复。我也尝试过这种方式,但现在也得到了一个空数组。 为什么要写这个let countryArray = json[0].arrayValue,你的数据是数组所以不需要json[0].arrayValue,只用json.arrayValue 或者直接试试for (index,subJson):(String, JSON) in json // Do something you want 【参考方案1】:

你班上的两个问题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)
    
  

【讨论】:

感谢您的快速回复。 json.arrayValue 本身是空的。但是当我打印 json 时,它会像这样打印。 ["CountryID":2,"Name":"Afghanistan","Code":"AFG","CreatedDate":"2018-01-09T02:05:02.08","CountryID":3,"Name ":"奥兰群岛","代码":"ALA","CreatedDate":"2018-01-09T02:05:02.08",...] 请在此处发布您的整个 json:jsoneditoronline.org 并在线保存后将链接发送给我。对于您在问题中提供的 json,上述更改对我有用 感谢您的努力。这是链接jsoneditoronline.org/?id=0fa1720a4dd9d2e45838771cbf08facb 你的 json 看起来很完美,当我用我的演示项目替换它时,它在我的演示项目中运行良好:dropbox.com/s/o64vyyi03yg9lyc/SwiftyJsonTest.zip?dl=1 感谢 Inder。我现在会检查并通知您。【参考方案2】:

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

do 
   let array = try JSONSerialization.jsonObject(with: response.data!) as? NSArray
   let countryListData = CountryList(fromArray: array!)
   completionHandler(true, countryListData)
 catch 
   print("Exception occured \(error))")

并像这样更改 CountryList 类

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
    

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

【讨论】:

以上是关于在 SwiftyJson 中的方括号之前解析没有键的数组?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftyJSON 解析 JSON

尝试使用 swiftyJSON 快速解析 JSON

Swift 1.2 中的 SwiftyJson 错误

使用 SwiftyJSON 解析 json

使用 SwiftyJSON 解析 JSON

使用 SwiftyJSON 的未解析标识符 JSON