如何在Java中为JSON数组的每个JSON对象添加新属性
在Java中为JSON数组的每个对象追加新键值对的方法
下面是几种常用Java JSON处理库的实现方式,均能给records数组中的每个对象添加category: "ABC"字段:
使用Jackson库
Jackson是Java生态中广泛使用的JSON处理库,步骤如下:
- 添加Maven依赖(若使用Maven):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
- 代码实现:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; public class AddCategoryField { public static void main(String[] args) throws Exception { String jsonStr = "{\n" + " \"records\": [\n" + " {\n" + " \"time\": \"2023-04-04T00:02:40.8303990Z\",\n" + " \"ProviderName\": \"Service Control Manager\",\n" + " \"EventId\": 7036,\n" + " \"Level\": 4\n" + " },\n" + " {\n" + " \"time\": \"2023-04-04T00:02:40.8303990Z\",\n" + " \"ProviderName\": \"Service Control Manager\",\n" + " \"EventId\": 7037,\n" + " \"Level\": 3\n" + " }\n" + "]\n" + "}"; ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(jsonStr); // 获取records数组节点 JsonNode recordsNode = rootNode.get("records"); if (recordsNode.isArray()) { // 遍历数组中的每个对象,添加category字段 for (JsonNode node : recordsNode) { ObjectNode objectNode = (ObjectNode) node; objectNode.put("category", "ABC"); } } // 输出格式化后的JSON字符串 String updatedJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); System.out.println(updatedJson); } }
关键说明:需将只读的JsonNode强转为可修改的ObjectNode,才能对JSON对象进行字段追加操作。
使用Gson库
Gson是Google推出的轻量JSON处理库,实现步骤如下:
- 添加Maven依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
- 代码实现:
import com.google.gson.*; public class AddCategoryWithGson { public static void main(String[] args) { String jsonStr = "{\n" + " \"records\": [\n" + " {\n" + " \"time\": \"2023-04-04T00:02:40.8303990Z\",\n" + " \"ProviderName\": \"Service Control Manager\",\n" + " \"EventId\": 7036,\n" + " \"Level\": 4\n" + " },\n" + " {\n" + " \"time\": \"2023-04-04T00:02:40.8303990Z\",\n" + " \"ProviderName\": \"Service Control Manager\",\n" + " \"EventId\": 7037,\n" + " \"Level\": 3\n" + " }\n" + "]\n" + "}"; Gson gson = new Gson(); JsonObject rootObj = gson.fromJson(jsonStr, JsonObject.class); JsonArray recordsArray = rootObj.getAsJsonArray("records"); // 遍历数组,给每个对象添加字段 for (JsonElement element : recordsArray) { if (element.isJsonObject()) { JsonObject obj = element.getAsJsonObject(); obj.addProperty("category", "ABC"); } } // 生成格式化后的JSON输出 Gson prettyGson = new GsonBuilder().setPrettyPrinting().create(); String updatedJson = prettyGson.toJson(rootObj); System.out.println(updatedJson); } }
关键说明:遍历数组时需先判断元素是否为JsonObject,再执行字段追加;通过GsonBuilder可生成带缩进的格式化JSON。
使用org.json库
org.json是轻量级原生风格的JSON处理库,适合简单场景:
- 添加Maven依赖:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20230227</version> </dependency>
- 代码实现:
import org.json.JSONArray; import org.json.JSONObject; public class AddCategoryWithOrgJson { public static void main(String[] args) { String jsonStr = "{\n" + " \"records\": [\n" + " {\n" + " \"time\": \"2023-04-04T00:02:40.8303990Z\",\n" + " \"ProviderName\": \"Service Control Manager\",\n" + " \"EventId\": 7036,\n" + " \"Level\": 4\n" + " },\n" + " {\n" + " \"time\": \"2023-04-04T00:02:40.8303990Z\",\n" + " \"ProviderName\": \"Service Control Manager\",\n" + " \"EventId\": 7037,\n" + " \"Level\": 3\n" + " }\n" + "]\n" + "}"; JSONObject rootObj = new JSONObject(jsonStr); JSONArray recordsArray = rootObj.getJSONArray("records"); // 通过索引遍历数组,追加字段 for (int i = 0; i < recordsArray.length(); i++) { JSONObject obj = recordsArray.getJSONObject(i); obj.put("category", "ABC"); } // 输出带缩进的格式化JSON System.out.println(rootObj.toString(4)); } }
关键说明:直接通过索引遍历JSONArray,调用put方法即可给JSONObject追加字段;toString(4)参数控制缩进空格数。
内容的提问来源于stack exchange,提问作者dev007
相关产品推荐
相关产品推荐

