【问题标题】:Json is not parsed because of the number in the name由于名称中的数字,未解析Json
【发布时间】:2021-10-17 21:57:41
【问题描述】:

我无法解析 json 数据,因为名称包含数字 3,而不是字符串 通过 quicktype.io 尝试过,但它写的是 3 而不是 3,但每次我得到 nil 尝试创建变量 3,但无法从数字创建

这里是 Json

"items": {
        "3": {
            "name": "Тариф Gold 3 месяцев",
            "product_id": 123,
            "taxes": {
                "total": {
                    "1": "0.08"
                },
                "subtotal": {
                    "1": "0.08"
                }
            },
            "meta_data": []
        }
    }

这是我的代码

    // MARK: - ServerStatusElement
struct ServerStatusElement: Decodable {
//    var data: DataClass?
    var items: Items?
}

// MARK: - DataClass
struct DataClass: Decodable {
    var id: Int?
    var status: String?
}

struct Items: Codable {
    var items: itemsS
}
struct itemsS: Codable {
    var the3: Int
}
typealias typeNetwork = [ServerStatusElement]
func fetchSubscribe(url: String) {
    let url = URL(string: url)!
    
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        guard let data = data else { return }
        guard error == nil else { return }
        do {
            let value = try JSONDecoder().decode(typeNetwork.self, from: data)


            print(value[0].items)

            } catch let error {
                print("Ошибка: \(error)")
            }
        }.resume()
}

【问题讨论】:

  • Items 定义为字典,let items: [String: SomeType] 您需要将 SomeType 替换为“3”下的值所使用的实际类型
  • 我不太明白如何将其写入结构
  • struct ServerStatusElement: Decodable { let items: [String: SomeType] }
  • 希望你没有使用 SomeType...
  • 只是一个注释:这个非常短的代码因为命名而阅读起来很痛苦:Items 和 itemsS 太相似了。此外,结构名称应以大写开头。

标签: ios json swift xcode mobile


【解决方案1】:

在带有 3 的结构中,您可以添加一组自定义编码键,例如:


struct itemsS: Codable {
    var the3: Int


    enum CodingKeys: String, CodingKey {
        case the3 = "3"
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2021-11-02
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多