You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift如何仅解码JSON响应中感兴趣的items数组?

直接解码JSON中的指定数组(无需单独定义根模型)

当然有办法,不同语言和JSON解析库都有对应的实现方式,以下是几种常见场景的解决方法:

Swift(iOS常用)

方法1:临时嵌套结构体(简洁高效)

不用单独创建根模型文件,只需在解码代码里定义一个临时的嵌套结构体,只包含你需要的items字段:

struct Item: Codable {
    let id: Int
    let name: String
    // 其他业务字段
}

// 假设data是HTTP响应返回的JSON数据
do {
    // 局部定义临时结构体,仅用于解码根元素的items字段
    struct TempRoot: Codable {
        let items: [Item]
    }
    let result = try JSONDecoder().decode(TempRoot.self, from: data)
    let targetItems = result.items
    // 处理解码后的items数组
} catch {
    print("解码出错:\(error)")
}

方法2:先解析为顶层容器再提取

如果不想定义任何临时结构体,可以先把整个JSON解码为字典,再提取items字段重新解码:

do {
    // 先解码成[String: Any]字典
    let rootDict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
    guard let itemsRaw = rootDict?["items"] else { return }
    // 将items转成Data后再解码为模型数组
    let itemsData = try JSONSerialization.data(withJSONObject: itemsRaw)
    let items = try JSONDecoder().decode([Item].self, from: itemsData)
    // 处理items
} catch {
    print("解码失败:\(error)")
}

Python

直接解析JSON后提取数组,再映射到自定义模型:

import json
from dataclasses import dataclass

@dataclass
class Item:
    id: int
    name: str

# 假设response_text是HTTP响应的JSON字符串
response_json = json.loads(response_text)
items_list = response_json.get("items", [])
# 映射为模型数组
item_models = [Item(**item) for item in items_list]

Java(Gson库)

通过JsonObject提取指定数组,再解码为模型列表:

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import java.util.List;

// 你的数据模型类
class Item {
    public int id;
    public String name;
    // 其他字段
}

// 假设jsonString是HTTP响应的JSON内容
Gson gson = new Gson();
JsonObject rootObj = gson.fromJson(jsonString, JsonObject.class);
List<Item> items = gson.fromJson(
    rootObj.getAsJsonArray("items"),
    new TypeToken<List<Item>>(){}.getType()
);

内容的提问来源于stack exchange,提问作者iOS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:35:06