ios - 如何使用 [] 括号解析 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
}
解决方案
假设您的数据模型如下所示您可以使用 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
}
}
这里有什么变化?
由于您的价格数据采用数组格式,因此相应地编写了代码,并且根据新数据,它不再是数组,因此您还必须在应用程序端调整这些更改。
推荐阅读
- angular - 如何使用角度将图像缓存在浏览器内存中以避免重复的服务器命中?
- jenkins - 詹金斯:从 ${ITEM_FULL_NAME} 中删除空格
- github - 使用 GitHub 操作在项目板中移动问题
- linux - Yocto dunfell capnproto receipe,得到编译器错误
- javascript - VueJS如何从活动项目切换子项目
- sql - 基于视图条目在存储过程中引发异常
- firebase - 是否可以将 FCM 从特定操作系统的云功能发送到各种令牌?
- mysql - 仅匹配右表中的一条记录时如何左连接
- r - R:: 基于笔划、线条和点等符号填充,而不是 ggplot 中的颜色
- r - 如果一列满足某个标准,R 复制整个角色