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

如何将JSON对象中原为ArrayList的attributeName等字段还原为ArrayList

嘿,这个问题我之前在项目里碰到过,其实关键就是在JSON反序列化的时候,把对应的字段类型指定为ArrayList(或者对应语言的动态列表类型)就行。我给你分几种常用编程语言的情况详细说说:

Java 场景(Jackson/Gson 实现)

因为你提到的ArrayList是Java里的典型动态列表类型,这里重点讲这个场景:

  1. 首先定义和JSON结构匹配的实体类,直接把目标字段的类型声明为ArrayList<String>(从你的示例看元素是字符串类型):
public class Product {
    private int id;
    private String name;
    // 直接声明为ArrayList类型
    private ArrayList<String> attributeName;
    private ArrayList<String> attributeValue;
    private ArrayList<String> attributeStock;
    
    // 必须添加无参构造方法,以及所有字段的getter/setter
    // Jackson和Gson反序列化时依赖这些方法
    public Product() {}
    
    // 这里省略getter和setter的具体实现,你可以自己生成
}
  1. 用Jackson库反序列化:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws Exception {
        String jsonStr = "[{\"id\":4,\"name\":\"shirt\",\"attributeName\":[\"size\"],\"attributeValue\":[\"6-7\"],\"attributeStock\":[\"3\"]}]";
        
        ObjectMapper objectMapper = new ObjectMapper();
        // 用TypeReference指定泛型类型,避免类型擦除问题
        List<Product> productList = objectMapper.readValue(jsonStr, new TypeReference<List<Product>>() {});
        
        // 取出第一个产品的attributeName,直接就是ArrayList类型
        ArrayList<String> attrNames = productList.get(0).getAttributeName();
        System.out.println(attrNames.getClass()); // 输出class java.util.ArrayList
    }
}
  1. 如果用Gson库的话,写法略有不同:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "[{\"id\":4,\"name\":\"shirt\",\"attributeName\":[\"size\"],\"attributeValue\":[\"6-7\"],\"attributeStock\":[\"3\"]}]";
        
        Gson gson = new Gson();
        // 用TypeToken处理泛型
        List<Product> productList = gson.fromJson(jsonStr, new TypeToken<List<Product>>(){}.getType());
        
        ArrayList<String> attrNames = productList.get(0).getAttributeName();
    }
}

Python 场景

Python本身的list和Java的ArrayList功能几乎一致,如果你只是需要动态列表的特性,直接解析JSON就能得到:

import json

json_str = '[{"id":4,"name":"shirt","attributeName":["size"],"attributeValue":["6-7"],"attributeStock":["3"]}]'
product_list = json.loads(json_str)

# 取出的字段就是Python list,直接可用
attr_names = product_list[0]['attributeName']
print(type(attr_names)) # 输出<class 'list'>

# 如果你非要模拟Java的ArrayList(比如用第三方库),可以这样:
from arraylist import ArrayList
attr_names_arraylist = ArrayList(attr_names)

JavaScript 场景

JS里的数组本身就是动态的,和ArrayList的功能完全匹配,解析后直接使用即可:

const jsonStr = '[{"id":4,"name":"shirt","attributeName":["size"],"attributeValue":["6-7"],"attributeStock":["3"]}]';
const productList = JSON.parse(jsonStr);

// 取出的attributeName就是JS数组,支持所有动态列表操作
const attrNames = productList[0].attributeName;
console.log(typeof attrNames); // 输出object(JS数组属于对象类型)
// 比如添加元素:attrNames.push("color");

注意事项

  • 确保JSON中的attributeName、attributeValue、attributeStock字段本身是数组格式(像你示例里的["size"]),如果是单个值(比如"size"),需要额外处理成数组后再转成ArrayList。
  • 其他编程语言的思路类似:在反序列化时将目标字段的类型指定为对应语言的动态列表类型,比如C#里的List<string>,Go里的[]string等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:57