我正在swift中调用API,API的响应如下所示:

[
    {
        "response": {
            "data": {
                "first": "Hello",
                "second": "Hola",
                "third": "Namaste"
            }
        }
    }
]

现在,为了能够将其集成到我的应用程序中,我需要解码API调用的响应,我使用的类型如下:

struct APIResponse: Codable {
  let response: Response
}
    
struct Response: Codable {
  let data: Data
}
    
struct Data: Codable {
  let first: String
  let second: String
  let third: String
} 

现在的问题是,这种类型是错误的,因为API响应实际上是一个只有一个元素(索引0)的数组,这意味着如果来自API的响应是

[
  "response": {
    "data": {
      "first": "Hello",
      "second": "Hola",
      "third": "Namaste"
    }
  }
]

如何在我的类型中定义索引-0数据?

我用于进行API调用和解码JSON的代码:

var request = URLRequest(url: URL(string: "https://myurl.com")!)
let (data, _) = try await URLSession.shared.data(for: request)
let decodedResponse = try? JSONDecoder().decode(APIResponse.self, from: data)

推荐答案

您的响应是一组元素:

let decodedResponse = try JSONDecoder().decode([APIResponse].self, from: data)

以及:

let element = decodedResponse.first

应该会让你走的.

永远不要使用try?它会混淆所有错误.

Json相关问答推荐

从先前的REST调用创建动态JSON主体

我可以使用JQ来缩小数组中的json对象的范围吗?

JSON:将项';S键/名称移动到属性中,并使用JQ将其转换为数组

在PowerShell中,如何获取数据对所在的JSON对象的名称

无法使用Jolt变换在嵌套的JSON中提取值

使用jq过滤复杂json对象中的数据

jq: Select 何时来自另一个数组的值与此 json 中的值匹配

jq json - 按键名 Select

无法在Kotlin 中解析JSONObject

如何将动态复杂 json 解析为dart 对象或模型

Jackson 的@JsonView、@JsonFilter 和 Spring

Spring MVC 4:application/json内容类型设置不正确

在 JSON 编码的 HTML5 数据属性中转义/编码单引号

将 JSON 对象推送到 localStorage 中的数组

如何向(JSON)对象的原型添加方法?

python追加到json对象中的数组

C++:使用 nlohmann json 从文件中读取 json 对象

是否有一个 PHP 函数只在双引号而不是单引号中添加斜杠

使用 JSONPath 从 JSON 对象中获取单个值

在 C# 中反序列化 JSON 数组