有没有办法在不创建***结构的情况下将 JSON 解码为结构

Posted

技术标签:

【中文标题】有没有办法在不创建***结构的情况下将 JSON 解码为结构【英文标题】:Is there a way to decode JSON into struct without creating top level structure 【发布时间】:2021-08-10 03:02:56 【问题描述】:

我需要一种将 JSON 解码为 Swift 结构的方法,但不是从*** JSON 开始解码。

例如,我有一些这样的 JSON 响应

"response":  "name": "John", "id": 2" 

实际上,我只需要包含 name 和 id 字段的嵌套对象,我不需要结构中的***“响应”。

所以问题是: 我可以在没有“响应”顶层的情况下解码该嵌套对象吗? 但如果我能检查一下,如果这个***“响应”存在,然后解码,那就太好了。

我的 API 返回内部带有响应对象的***“响应”或内部带有错误对象的***“错误”,因此我必须在解码之前检查是否有错误或响应。

【问题讨论】:

给出你尝试的示例代码 【参考方案1】:

您需要包含所有内容,但如果您不想从顶层创建结构,您可以将其解码为字典

struct Person: Decodable 
    let id: Int
    let name: String


do 
    let result = try JSONDecoder().decode([String: Person].self, from: data)
    
    if let response = result["response"] 
        print(response)
     else if let error = result["error"] 
        print(error)
     else 
        print("Unknown result from API call")
    

【讨论】:

【参考方案2】:

您可以尝试使用ObjectMapper 并这样做:Mapping of Nested Objects

func mapping(map: Map) 
    name <- map["response.name"]
    id   <- map["response.id"]

【讨论】:

以上是关于有没有办法在不创建***结构的情况下将 JSON 解码为结构的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不覆盖现有类名的情况下将类名添加到 blazor 组件?

有没有办法在不离开 App 的情况下将评分发送到 App Store?

有没有办法在不使用通知服务扩展的情况下将图像附加到推送通知?

如何在不丢失值的情况下将 json 解析为 pandas 数据框? [复制]

有没有办法在不向表格元素添加类的情况下将 css 应用于元素? [复制]

有没有办法在不知道派生类型的情况下将包含派生指针的 std::any 转换为基指针?