首页 > 解决方案 > 如何使用 [] 括号解析 JSON?

问题描述

我在这样的网站上通过 JSON 解析(在 Swift 中的 request.httpMethod = "GET" 下):

  let example = json.data.first?.TShirtPrice

我得到的 JSON 的结构是这样的

{"returned":1,"data":[{"TShirtPrice":"5"}]}

但是我有一个新的 JSON 集,其结构没有 [] 括号,如下所示:

{"returned":1,"base":"USD","data":{"TShirtPrice":"3.448500"}}

相同的确切代码不再让我得到衬衫的价格——解决办法是什么?谢谢!

这是我的代码

 if let data = data {

                    do {
                        let json = try JSONDecoder().decode(Root.self,from: data)


                        let price = json.data.first?.TShirtPrice


                        struct Root: Codable {
                            let data: [Datum]
                        }
                        struct Datum: Codable {
                            let TShirtPrice: String


                        }

标签: iosjsonswiftxcode

解决方案


假设您的数据模型如下所示您可以使用 Struct 或 Class 这不是问题。

struct Root: Decodable {
    let returned: Int?
    let base: String?
    let data: Price?
}

struct Price: Codable {
    let TShirtPrice: String? 
}

示例 JSON 字符串如下

let jsonString = """
{
  "returned": 1,
  "base": "USD",
  "data": {
    "TShirtPrice": "3.448500"
  }
}
"""

您只需要通过更改上面给出的数据模型以及访问下面给出的数据的方式来更改解析数据的方式

if let data = jsonString.data(using: .utf8) {
    let myObject = try JSONDecoder().decode(Root.self, from: data)
    print(myObject.data?.TShirtPrice)
}

在你的情况下,它看起来像这样

if let data = data {
    do {
        let json = try JSONDecoder().decode(Root.self,from: data)
        let Price = json.data?.TShirtPrice
    }
}

这里有什么变化?

由于您的价格数据采用数组格式,因此相应地编写了代码,并且根据新数据,它不再是数组,因此您还必须在应用程序端调整这些更改。


推荐阅读