【问题标题】:JSONObject inside JSONArrayJSONArray 中的 JSONObject
【发布时间】:2015-09-13 08:47:56
【问题描述】:

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

JSON数组:

[{
    "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"
        }
    ]
}
]

我尝试使用这段代码,但结果不ok:

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"
        }
    ]
}
]

“事件”键值大部分位于 JSONArray 中的唯一元素内,而不是作为另一个元素。

【问题讨论】:

    标签: java arrays json jsonobject


    【解决方案1】:

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

    这会将jsonObject 添加到JSONArray 中的第一个JSONObject

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

    【讨论】:

    • 这正是我所期望的。
    【解决方案2】:

    你需要,

    ((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());
        }
    

    【讨论】:

      【解决方案3】:

      我没有测试代码,但我认为这会起作用。如果你想试试。 jsonArray[0].events 将在 0 索引对象中创建一个名为“事件”的新字段。

       jsonArray[0].events = jsonObject.events;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-28
        • 2018-07-18
        相关资源
        最近更新 更多