在 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 协议的更广泛信息

https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types

希望这对您有所帮助 :)