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

如何在Java中为JSON数组的每个JSON对象添加新属性

在Java中为JSON数组的每个对象追加新键值对的方法

下面是几种常用Java JSON处理库的实现方式,均能给records数组中的每个对象添加category: "ABC"字段:

使用Jackson库

Jackson是Java生态中广泛使用的JSON处理库,步骤如下:

  1. 添加Maven依赖(若使用Maven):
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>
  1. 代码实现:
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处理库,实现步骤如下:

  1. 添加Maven依赖:
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>
  1. 代码实现:
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处理库,适合简单场景:

  1. 添加Maven依赖:
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230227</version>
</dependency>
  1. 代码实现:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:43:19