JSONArray 中的 JSONObject

JSONObject inside JSONArray

我正在尝试将 JSONObject 放入 Java 中的 JSONArray 中。这是我的两个对象:

JSONArray:

[{
    "url": null,
    "flag": "0",
    "read": "0",
    "time": 2000,
    "exp": null,
    "population": 10
}]

JSON对象:

{
"events": [
    {
        "color": "Green",
        "event": "Restart"
    },
    {
        "color": "Black",
        "event": "Shutdown"
    },
    {
        "color": "White",
        "event": "Read"
    }       
]
}

预期结果:

[
{
    "url": null,
    "flag": "0",
    "read": "0",
    "time": 2000,
    "exp": null,
    "population": 10,
    "events": [
        {
            "color": "Green",
            "event": "Restart"
        },
        {
            "color": "Black",
            "event": "Shutdown"
        },
        {
            "color": "White",
            "event": "Read"
        }
    ]
}
]

我试过用这段代码,结果不行:

jsonArray.put(jsonObject);

意外结果:

[
{
    "url": null,
    "flag": "0",
    "read": "0",
    "time": 2000,
    "exp": null,
    "population": 10
},
{
    "events": [
        {
            "color": "Green",
            "event": "Restart"
        },
        {
            "color": "Black",
            "event": "Shutdown"
        },
        {
            "color": "White",
            "event": "Read"
        }
    ]
}
]

"events" 键值大多数位于 JSONArray 中的唯一元素内,而不是作为另一个元素。

JSONArray 包含一个 JSONObject。当您 jsonArray.put(jsonObject); 时,您将其添加到 JSONArray,而不是 JSONArray 中的 JSONObject

这会将 jsonObject 添加到 JSONArray

中的第一个 JSONObject
jsonArray.getJsonObject(0).put("events",jsonObject.get("events"));

你需要,

((JSONObject) jsonArray.get(0)).put("events", jsonObject.get("events"));

或者,以更一般化的形式,

    for (Map.Entry entry : (Set<Map.Entry>) jsonObject.entrySet()) {
        ((JSONObject) jsonArray.get(0)).put(entry.getKey(), entry.getValue());
    }

我没有测试代码,但我认为这可行。如果你愿意,试试吧。 jsonArray[0].events 将在 0 索引对象中创建一个名为 'events' 的新字段。

 jsonArray[0].events = jsonObject.events;