我将如何使用 SwiftyJSON 解析这种类型的 JSON?

Posted

技术标签:

【中文标题】我将如何使用 SwiftyJSON 解析这种类型的 JSON?【英文标题】:How would I parse this type of JSON using SwiftyJSON? 【发布时间】:2015-09-06 02:53:47 【问题描述】:
[

  

    "ID": 0,

    "Name": "PHI"

  ,

  

    "ID": 0,

    "Name": "ATL"

  

]

我正在使用 SwiftyJSON 和 Alamofire。这就是被退回的东西。我现在想在我的代码中遍历这些对象中的每一个。不过,我在获取此信息时遇到了麻烦。

json[0]["Name"].string 似乎返回 nil,我不知道为什么。 JSON 对象肯定会获取 JSON,当我将它打印到控制台时,它看起来与上面完全一样。

我也试过了:

var name = json[0].dictionary?["Name"]

但仍然为零。

有什么想法吗?

编辑

这是我用来检索 JSON 的代码。

Alamofire.request(.GET, "url", parameters: nil, encoding: .JSON, headers: nil).responseJSON 

    (request, response, data, error) in
    var json = JSON(data!)
    //var name = json[0].dictionary?["Name"]

【问题讨论】:

你试过打印json[0]吗? 是的,json[0] 也是 nil。 如果 json[0] 为 nil,那么我认为格式化和/或检索有问题 您能否发布从检索数据到尝试解析数据的所有代码? 我刚刚将用于检索的代码添加到我的原始帖子中。 【参考方案1】:

您的 JSON 是有效的(至少这个 sn-p 是有效的),并且您从 SwiftyJSON 检索数据的第一个方法是正确的。

另一方面,你展示的 Alamofire sn-p 没有为我编译,我不得不更改签名。

鉴于在 cmets 中您说不仅 json[0]["Name"] 为零,而且json[0] 为零,我认为您的数据获取方式存在问题。

我在一个示例应用中测试了这个版本的 Alamofire 方法,它运行良好:

Alamofire.request(.GET, yourURL).responseJSON(options: nil)  (request, response, data, error) in
    let json = JSON(data!)
    let name = json[0]["Name"].string
    println(name)

在屏幕截图中,URL 是我的本地服务器,您的 JSON 副本粘贴在“test.json”中。

这个“答案”是我评论的延伸,我需要空间来显示更多信息...

【讨论】:

嗯.. 如果我按照您对我的 URL 所做的方式格式化我的请求,它就不再返回 JSON。数据为零。 好的。我猜我们正在使用不同版本的 Alamofire,那么。也许你身边还有别的东西。 // 我认为现在你应该多调试一下,检查每一个看起来不错但实际上是错误的步骤(经典陷阱)。类似 1- 使用 Alamofire alone 验证它是否返回数据。 2-验证此数据是您的有效 json。 3-你能用 NSJSONSerializtion 打印结果吗? 4-你能用 SwiftyJSON 做吗?等等。 如果您打印 json 对象,它对您来说是什么样的?我的看起来像这样:["ID":0,"Name":"Philadelphia","ID":0,"Name":"NFL"] 我有same,唯一的区别是它“打印得很漂亮”(缩进)。 提示:您可以像这样验证从 Alamofire 获得的 json 数据是否有效:print(NSJSONSerialization.isValidJSONObject(data!))【参考方案2】:

我想你可以试试这个。

首先使用 swifyJSON 转换 JSON(数据)

           let json = JSON(data!)

然后统计data中的数组元素。

                let count: Int? = json.array?.count

之后使用 for 循环到达数组元素一。

  for index in 0...count-1 

         self.idArray.append(json[index]["ID"].stringValue)

        self.nameArray.append(json[index]["Name"].stringValue)
               

您将在“idArray”和“nameArray”中获得排序数据。尝试打印两个数组。

【讨论】:

【参考方案3】:

您不必使用索引来解析数组。您可以从数组中获取单个 json 对象并使用它来访问数据:

for (index: String, subJson: JSON) in json 
    println("Current Index = \(index)")

    if let _id = subJson["ID"].int 
        println("ID = \(_id)")
     else 
        println("Error ID")
    

    if let _name = subJson["Name"].string 
        println("Name = \(_name)")
     else 
        println("Error Name")
       

【讨论】:

以上是关于我将如何使用 SwiftyJSON 解析这种类型的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftyJSON 解析 JSON

尝试在 iOS 7 下使用 SwiftyJSON 解析 JSON 数据时出现未知类型

IOS应用程序性能太慢,无法使用swiftyjson解析数据[关闭]

SwiftyJSON 代码 - 为啥/如何工作?

swift、Alamofire、SwiftyJSON:如何解析 arrayObject

如何使用 SwiftyJson 解析 JSON