首页 > 解决方案 > 我如何在这个 JSON 之后创建一个 Struct 模型?

问题描述

这是我的 JSON:

https://pastebin.com/8HR6jcuC

这是我创建的模型,但它未能解码:

struct Response: Decodable {
    let results: [Order]
}

struct Order: Decodable {
    let charge_id: String
    let createdAt: String
    let items_bought : [BoughtItems]
    let objectId: String
    let soldBy: String
    let total: String
    let status: String
}

struct BoughtItems: Decodable {
    let price: Int
    let productTitle: String
    let quantity: Int
    let variantId: Int
    let variantTitle: String
}

标签: jsonswiftcodable

解决方案


请抓住错误并处理它。Codable错误非常具有描述性。

类型“Int”不匹配:应解码 Int,但找到了字符串/数据。

codingPath: [CodingKeys(stringValue: "results", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "items_bought", intValue: nil), _JSONKey(stringValue: "Index 0 ", intValue: 0), CodingKeys(stringValue: "price", intValue: nil)]

清楚地说pricein BoughtItemsisString而不是Int.

替换let price: Intlet price: String你后会得到另一个错误

类型“字符串”不匹配:应解码字符串,但找到了一个数字。

codingPath: [CodingKeys(stringValue: "results", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "total", intValue: nil)]

这也很清楚。的类型totalDouble,不是String

使固定:let total: Double


请学习阅读JSON。这很简单:

  • 双引号中的所有内容(也不例外)是String
  • 浮点数值是Double
  • 其他数值为Int
  • truefalse(没有双引号)是Bool

推荐阅读