如何将JSON对象中原为ArrayList的attributeName等字段还原为ArrayList
嘿,这个问题我之前在项目里碰到过,其实关键就是在JSON反序列化的时候,把对应的字段类型指定为ArrayList(或者对应语言的动态列表类型)就行。我给你分几种常用编程语言的情况详细说说:
Java 场景(Jackson/Gson 实现)
因为你提到的ArrayList是Java里的典型动态列表类型,这里重点讲这个场景:
- 首先定义和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的具体实现,你可以自己生成 }
- 用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 } }
- 如果用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
相关产品推荐
相关产品推荐

