在 Json 对象 Swift 中解析 Json 对象 5
Parsing Json object within a Json Object Swift 5
我正在尝试解析 Xcode 中的一些 json,这基本上是一个对象中的一堆对象。 json 如下所示。
{"TDOC": {
"assetType": "EQUITY",
"assetMainType": "EQUITY",
"cusip": "87918A105",
"symbol": "TDOC"}}
我正在使用下面的代码在 Xcode 中使用 swift5
解析它
do {
if let json = try JSONSerialization.jsonObject(with: jData, options: []) as? [String: Any] {
if let pr = json["TDOC"] as? Array<Dictionary<String, Any>> {
for p in pr {
print(p["assetType"] ?? "")
}
}
}
} catch let err {
print(err.localizedDescription)
}
我正在尝试获取 assetType 值,但是当我 运行 代码时,没有任何内容输出到控制台。当我调试时,似乎 Xcode 只是跳过了我的 for in 循环,因为出于某种原因打印了 assetType。对此的任何帮助表示赞赏。
试试这个。
"TDOC"键对应的是字典值,不是数组。也不需要 for 循环。
do {
if let json = try JSONSerialization.jsonObject(with: jData, options: []) as? [String: Any] {
if let pr = json["TDOC"] as? [String: Any] {
print(pr["assetType"])
}
}
} catch let err {
print(err.localizedDescription)
}
希望对您有所帮助。
您不能将 TDOC
对象视为数组。由于是字典对象,可以直接取Dictionary
。
你可以这样做。
do {
if let json = try JSONSerialization.jsonObject(with: jData, options: []) as? [String: Any] {
if let pr = json["TDOC"] as? Dictionary<String, Any> {
print(pr["assetType"])
}
}
} catch let err {
print(err.localizedDescription)
}
1.对您的数据进行反射 class 并使其符合 Codable 协议
import Foundation
// MARK: - Welcome
struct MyObject: Codable {
let tdoc: Tdoc
enum CodingKeys: String, CodingKey {
case tdoc = "TDOC"
}
}
// MARK: - Tdoc
struct Tdoc: Codable {
let assetType, assetMainType, cusip, symbol: String
}
1.使用 JSONDecoder 解析它:
do {
let myObject = try JSONDecoder().decode(MyObject.self, from: jsonData)
print(myObject.tdoc.assetType)
} catch {
print(error)
}
这里有一个 Apple 文档,其中包含有关编码、解码和 CodingKeys 协议的更广泛信息
希望这对您有所帮助 :)
我正在尝试解析 Xcode 中的一些 json,这基本上是一个对象中的一堆对象。 json 如下所示。
{"TDOC": {
"assetType": "EQUITY",
"assetMainType": "EQUITY",
"cusip": "87918A105",
"symbol": "TDOC"}}
我正在使用下面的代码在 Xcode 中使用 swift5
解析它do {
if let json = try JSONSerialization.jsonObject(with: jData, options: []) as? [String: Any] {
if let pr = json["TDOC"] as? Array<Dictionary<String, Any>> {
for p in pr {
print(p["assetType"] ?? "")
}
}
}
} catch let err {
print(err.localizedDescription)
}
我正在尝试获取 assetType 值,但是当我 运行 代码时,没有任何内容输出到控制台。当我调试时,似乎 Xcode 只是跳过了我的 for in 循环,因为出于某种原因打印了 assetType。对此的任何帮助表示赞赏。
试试这个。
"TDOC"键对应的是字典值,不是数组。也不需要 for 循环。
do {
if let json = try JSONSerialization.jsonObject(with: jData, options: []) as? [String: Any] {
if let pr = json["TDOC"] as? [String: Any] {
print(pr["assetType"])
}
}
} catch let err {
print(err.localizedDescription)
}
希望对您有所帮助。
您不能将 TDOC
对象视为数组。由于是字典对象,可以直接取Dictionary
。
你可以这样做。
do {
if let json = try JSONSerialization.jsonObject(with: jData, options: []) as? [String: Any] {
if let pr = json["TDOC"] as? Dictionary<String, Any> {
print(pr["assetType"])
}
}
} catch let err {
print(err.localizedDescription)
}
1.对您的数据进行反射 class 并使其符合 Codable 协议
import Foundation
// MARK: - Welcome
struct MyObject: Codable {
let tdoc: Tdoc
enum CodingKeys: String, CodingKey {
case tdoc = "TDOC"
}
}
// MARK: - Tdoc
struct Tdoc: Codable {
let assetType, assetMainType, cusip, symbol: String
}
1.使用 JSONDecoder 解析它:
do {
let myObject = try JSONDecoder().decode(MyObject.self, from: jsonData)
print(myObject.tdoc.assetType)
} catch {
print(error)
}
这里有一个 Apple 文档,其中包含有关编码、解码和 CodingKeys 协议的更广泛信息
希望这对您有所帮助 :)