【问题标题】:Parsing data using NSJSONSerialization.JSONObjectWithData() but cannot access Array groups only strings使用 NSJSONSerialization.JSONObjectWithData() 解析数据,但不能仅访问数组组字符串
【发布时间】:2016-12-10 17:27:42
【问题描述】:

我已经下载了下面的 Json 格式的数据。

{"name":"Shropshire Outage","nc_lead":"John Smith","dma":"11/111","username":"vwaghx1","status":"REOPENED","sapOrder":"12341245","ccsText":"123","nbPropAtRisk":12,"logs":[{"dateTime":"2016-04-07 20:02:42","valveStatusChangeDateTime":"2016-04-07 20:02:00","user":"vwaghx1","uid":null,"task":"CUSTPOORSUPPLIES","id_log":1489},{"dateTime":"2016-04-07 20:03:35","valveStatusChangeDateTime":"2016-04-07 20:02:00","user":"vwaghx1","uid":1238768765,"task":"PRESSURELOGGER","id_log":1490},{"dateTime":"2016-04-07 20:04:36","valveStatusChangeDateTime":"2016-04-07 20:02:00","user":"vwaghx1","uid":7692466478,"task":"CUSTSUPPLIESRESTOREDSOME","id_log":1491}],"id_event":601,"region":"Shropshire","trigger":"No Supply Call”,”valveOps":[{"dateTime":"2016-04-07 20:06:12","user":"vwaghx1","uid":7866756788,"x":678666,"y":723325,"description”:”Burst main downstream valve","id_valve_op":523},{"dateTime":"2016-04-07 20:05:31","user":"vwaghx1","uid":5674456470,"x":344534,"y":723433,"description":"Valve to separate both rezones","id_valve_op":522},{"dateTime":"2016-04-14 12:32:00","user":"vwaghx1","uid":1234512345,"x":123123,"y":123123,"description":"test","id_valve_op":541}],"images":[{"name":"After improvement.jpg","dateTimeCreated":"2016-04-08 14:10:30","contentType":"image/jpeg","caption":null,"uuid":null,"fileExtension":"jpeg","id_image":661},...]}

但是,当我尝试使用下面的代码对其进行解析时,我只能访问字符串值,例如“name”、“nc_lead”、“region”等。

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) as? Array<Dictionary<String, AnyObject>> {
    for item in json {
        if let dict = item as? Dictionary<String, AnyObject> {
            if let nameStr = dict["name"] as? String {
                incidentList.valueStr = nameStr
            }
            if let codeStr = dict["dma"] as? String {
                incidentList.valueStr = codeStr
            }
            if let region = dict[“region”] as? String {
                incidentList.valueStr = region
            }
            if let ncLead = dict[“nc_lead”] as? String {
                incidentList.valueStr = ncLead
            }

我需要访问像“logs”、“images”和“valveOps”这样的组值,它们在数组中有自己的字符串值。 如何更改我的代码,以便我可以像现在一样访问字符串并将组加载到数组中?

【问题讨论】:

  • 您已经在使用相同的想法,但要适应 JSON 结构。比如item["valveOps"] as? [[String:AnyObject]](字典数组)等等。

标签: ios json swift parsing nsjsonserialization


【解决方案1】:

你可以这样尝试,先声明3个数组。

var logArr: [[String: AnyObject]] = [[String: AnyObject]]()
var imageArr: [[String: AnyObject]] = [[String: AnyObject]]()
var valveArr: [[String: AnyObject]] = [[String: AnyObject]]()

现在在你得到响应的地方使用这个数组

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) as? Array<Dictionary<String, AnyObject>> {
for item in json {
    if let dict = item as? Dictionary<String, AnyObject> {
        if let nameStr = dict["name"] as? String {
            incidentList.valueStr = nameStr
        }
        if let codeStr = dict["dma"] as? String {
            incidentList.valueStr = codeStr
        }
        if let region = dict["region"] as? String {
            incidentList.valueStr = region
        }
        if let ncLead = dict["nc_lead"] as? String {
            incidentList.valueStr = ncLead
        }
        if let logs = dict["logs"] as? [[String: AnyObject]] {
            self.logArr = logs
        }
        if let valveOps = dict["valveOps"] as? [[String: AnyObject]] {
            self.valveArr = valveOps
        }
        if let images = dict["images"] as? [[String: AnyObject]] {
            self.imageArr = images
        }

【讨论】:

    猜你喜欢
    • 2019-09-20
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多