【问题标题】:How to parse through JSON with [] brackets?如何使用 [] 括号解析 JSON?
【发布时间】:2020-02-02 01:41:14
【问题描述】:

我在这样的网站上通过 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


                        }

【问题讨论】:

  • 你在使用 json_decode 吗?
  • @AmitSharma Yes: if let data = data { do { let json = try JSONDecoder().decode(Root.self,from: data) let Price = json.data.first?.TShirtPrice
  • 你好 @ChaseSmith 所以这个新的 json 响应更改是永久性的,或者它可以是其中任何一个??
  • @HarshalBhavsar 是永久的。
  • @ChaseSmith 查看以下答案,它应该可以帮助您访问数据。

标签: ios json swift xcode


【解决方案1】:

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

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

struct Price: Codable {
    let TShirtPrice: String? 
}

JSON Sting 示例如下

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
    }
}

这里有什么变化?

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

【讨论】:

  • 我将数据模型中的属性保留为可选,因为这取决于您。如果您不确定这些值是否会始终响应,可以将其保留为可选。如果响应数据发生一些变化,这有助于避免意外崩溃
  • 仅适用于这种情况,因为我使用的是本地 josn
  • 我收到以下错误:错误:dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定的数据不是有效的 JSON。”,underlyingError:可选(错误域=NSCocoaErrorDomain Code=3840 "无价值。" UserInfo={NSDebugDescription=无价值。})))
  • 是否可以添加你的模型,json和代码sn-p来解析它自己的问题?
猜你喜欢
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
相关资源
最近更新 更多