如何使用HashMap构造复杂JSON结构,无需依赖Jackson、GSON等第三方库
用HashMap构造嵌套、数组类型JSON的实现方法
首先明确JSON结构与Java原生集合的对应关系:
- 键值对形式的JSON对象(
{}包裹)对应Map<String, Object> - 有序列表形式的JSON数组(
[]包裹)对应List<Object> - 字符串、数字、布尔值等基础类型直接作为值存入集合即可
目标JSON对应的正确实现代码
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; // 1. 构造JSON根对象 Map<String, Object> jsonRequest = new HashMap<>(); // 2. 构造根节点下的customer对象 Map<String, Object> customerMap = new HashMap<>(); // 3. 构造address数组内部的单个地址对象 Map<String, String> addressItem = new HashMap<>(); addressItem.put("address", "Blah"); // 4. 构造address数组(用List实现) List<Map<String, String>> addressList = new ArrayList<>(); addressList.add(addressItem); // 5. 按层级组装结构:先把数组塞到customer对象里 customerMap.put("address", addressList); // 6. 把customer对象塞到根节点 jsonRequest.put("customer", customerMap); // 7. 添加根节点的anotherThing字段 jsonRequest.put("anotherThing", "thing");
之前代码的问题说明
- 层级结构错误:你把address对象直接放到了根节点,实际要求address数组属于customer对象的内部字段
- 没有用List实现数组结构:JSON中的
[]结构需要用List实现,你直接用Map存储,导致输出为对象而非数组 - 字段不匹配:目标JSON根节点没有
owner字段,你额外添加了该字段,且该字段对应的OwnerMap没有填入任何值,输出为空对象 - 变量大小写错误:Java是大小写敏感语言,你代码中定义的变量是
addressMap,调用时写的是addressmap,会导致编译错误
内容的提问来源于stack exchange,提问作者CatAndPlantGuy
相关产品推荐
相关产品推荐

