在 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 中的方括号之前解析没有键的数组?的主要内容,如果未能解决你的问题,请参考以下文章