无法使用 SwiftyJSON 访问 JSON 数据

Posted

技术标签:

【中文标题】无法使用 SwiftyJSON 访问 JSON 数据【英文标题】:Unable to use SwiftyJSON to access JSON data 【发布时间】:2018-07-05 16:38:22 【问题描述】:

我正在尝试访问一些 JSON 数据,但我无法使用 swiftyJSON 访问这些数据。我收到了 JSON 响应,所以我使用 alamofire 获取它。这是 JSON:

"groupID":"6","groupName":"Test","teacher":"teacher1 
","teacherID":"13","Locations": 
["locationID":"5","locationName":"field", 
"locationID":"6","locationName":"34th"],"Error":""

我正在使用打印语句来调试问题所在。这是我尝试使用的代码:

                    let json = JSON(response.result.value ?? "error")
                    //let jsonError = json["Error"]
                    print("=================<JSON RESPONSE>=================");
                    print(json)
                    print("=================</JSON RESPONSE/>=================");

                    self.groupID = json["groupID"].stringValue
                    self.groupName = json["groupName"].stringValue
                    self.teacherID = json["teacherID"].stringValue
                    let locjson = json["Locations"]


                    print("Entering LocJSON Loop")
                    print("=================<LOCJSON >=================");
                    print("GNAME:" +  self.groupID)
                    print("TID: " + json["teacherID"].stringValue)
                    print("Locjson.stringalue: " + locjson.stringValue)


                    //print("LocationJSON" + json["Locations"]);
                    print("=================</LOCJSON/>=================");

                    for (key, object) in locjson 
                        print("In LocJSON Loop")
                        let locationIDVar: Int? = Int(key)
                        self.locations[locationIDVar!].locationID = locationIDVar!
                        self.locations[locationIDVar!].locationName = object.stringValue
                        print(self.locations[locationIDVar!].locationName)
                        print(object);
                    

这是与打印语句相对应的控制台输出。

=================<JSON RESPONSE>=================
"groupID":"6","groupName":"Test","teacher":"Teacher1"         
,"teacherID":"13","Locations": 
["locationID":"5","locationName":"field", 
"locationID":"6","locationName":"34th"],"Error":""
=================</JSON RESPONSE/>=================
Entering LocJSON Loop
=================<LOCJSON >=================
GNAME:
TID: 
Locjson.stringalue: 
=================</LOCJSON/>=================

另外,我如何到达“位置”内的多个位置?

【问题讨论】:

您的 JSON 无效。您可以从中验证。 jsonlint.com 【参考方案1】:

Locations 的值是一个包含字典的数组。

    let locjson = json["Locations"].arrayValue
    for location in locjson 
        let locID = location["locationID"].stringValue
        let locName = location["locationName"].stringValue
        print(locID, locName)
    

在 Swift 4 中,我更喜欢 Decodable 而不是 SwiftyJSON,因为您可以直接解码为结构。

【讨论】:

谢谢!我会调查的。任何线索为什么 json["groupID"].stringValue 没有返回任何打印内容? 对于 JSON String 源,您必须使用 init(parseJSON: 初始化程序。

以上是关于无法使用 SwiftyJSON 访问 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Alamofire 和 SwiftyJSON 访问数组内部的 url,JSON 响应

SwiftyJson Swift 3 无法访问 JSON 中的字符串

包含 SwiftyJSON 时返回数百个错误

无法使用 SwiftyJSON 链接到本地​​文件

从 SwiftyJSON 块访问值时遇到问题

如何使用 Alamofire 和 SwiftyJSON 访问嵌套的 JSON 值?