从 Web 服务解析 JSON 数据时,没有返回数据

Posted

技术标签:

【中文标题】从 Web 服务解析 JSON 数据时,没有返回数据【英文标题】:When parsing JSON data from web service, no data returned 【发布时间】:2016-08-02 13:16:56 【问题描述】:

我正在尝试从调用 Web 服务的结果中填充 UITableView。数据以 JSON 格式返回,如下所示

["name":"CONTROL TEST",
"nc_lead":"TOM SMITH",
"datastr":"N/A",
"username":"tsmith",
"status":"REOPENED",
"orderno":"00000000",
"ccsText":"000",
"risk":0,
"dateTimeCreated":"2016-01-29 13:16:50",
"supplyStart":"2016-02-08T11:51:00+0000",
"supplyEnd":"2016-02-08T12:03:00+0000",
"logs":
    ["dateTime":"2016-02-02 11:26:18",
    "statusChangeDateTime":"2016-02-02 00:00:00",
    "user":"tsmith",
    "uid":1,
    "task":"TESTING",
    "info":"state changed to 'Y'",
    "x":456123,
    "y":362514,
    "id_log":28294,
   “dateTime":"2016-02-02 10:54:34", 
        "statusChangeDateTime":"2016-02-02 10:54:00",
    "user":"tsmith",
    "uid":1,
    "task":"TESTING",
    "info":"T Smith changed area.",
    "x":452356,
    "y":325489,
    "id_log":28291
   ,.....

没有键,因为第一部分由 12 个值作为标头组成,然后日志为每个标头形成一个值数组。我使用下面的代码返回我的 JSON 对象,解析来自我的 Web 服务调用的数据对象。

let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)

我可以使用下面的代码查看数据的返回值

let str = NSString(data: data!, encoding: NSUTF8StringEncoding)

然后我尝试使用如下代码来提取“名称”的值,但它不起作用

if let name = json["name"] as? [[String: AnyObject]] 

如何遍历我的 json 对象以从标头和日志数组中获取数据?

【问题讨论】:

你的 json 是字典数组,“name”是字符串 试试 json[0]["name"] 这一行得到了什么:let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)?你打印josn了吗? 感谢您的回复。我最初将 json 声明为返回 nil 的 NSDictionary,当我将其更改为 NSArray 时,它返回 15 个值,但我无法访问它们。同样使用 json[0]["name"] 不起作用并且正在调试中 【参考方案1】:

似乎json 对象是一个字典数组,所以你应该这样做:

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> 
            print(dict["name"])
        
    

转换应该是AnyObject,因为有时值是String,例如dict["name"] == "CONTROL TEST",但dict["logs"]Array&lt;Dictionary&lt;String, String&gt;&gt;。看到了吗?

【讨论】:

感谢您的回复,Anydata是什么?

以上是关于从 Web 服务解析 JSON 数据时,没有返回数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 iOS 5 应用程序从 .Net Web 服务消费和解析 JSON 数据

iOS 将 json 数据发布到 Web 服务并返回结果

从 ReactJS 调用 REST Web 服务

ajaxFileUpload上传文件成功后却无法解析服务器返回的json数据

如何缓存来自 Web 服务器的 okHTTP 响应?

当“contentType”为“false”时,使用 Ajax 从 Web 服务返回 JSON 而不是 XML