首页 > 解决方案 > 如何覆盖包含 JSONArray 的 JSONObject 中的值?

问题描述

所以我有一个看起来像这样的 JSON 数据。但是我需要在一个特定场景和一个特定元素(“iCalstate”)中反转其状态。

例如,如果它是真的,它应该覆盖它是假的。覆盖特定元素后,它应该将此 json 类型写入名为 test.json 的文件中。

{"scene": [
    {
        "id": 0,
        "element": [
            {"iCalstate": "false"},
            {"iCalstate": "false"}
        ]
    },
    {
        "id": 1,
        "element": [
            {"iCalstate": "false"},
            {"iCalstate": "false"}
        ]
    },
    {
        "id": 2,
        "element": [
            {"iCalstate": "false"},
            {"iCalstate": "false"}
        ]
    }
]} 

到目前为止我尝试了什么:我已经制作了获取 JSONObject 和 JSONArrays 的方法,我尝试创建一个 if 来反转值(它有效)。我没有管理的事情是在特定的场景索引和 elemindex 上反转它——>任何帮助将不胜感激

        int sceneindex = 0;
        int elemindex = 0;

        JSONObject json = new JSONObject();
        JSONArray scene = new JSONArray();
        JSONArray element = new JSONArray();
        JSONArray relement = datain.getIcalSettingsElement(sceneindex); //gets the element from the "olf"

        try {
            for (int i = 0; i < 1; i++) {
                json.put("scene", scene);

                JSONObject node = new JSONObject();
                scene.put(node);
                node.put("id", i);
                node.put("element", element);
            }
            for (int ii = 0; ii < 3; ii++) {
                if (ii == elemindex) {
                    JSONObject enode = new JSONObject();
                    String invwrite = "";
                    if (relement.getJSONObject(ii).getString("iCalstate").equals("true")) {
                        invwrite = "false";
                    } else if (relement.getJSONObject(ii).getString("iCalstate").equals("false")) {
                        invwrite = "true";
                    }
                    enode.put("iCalstate", invwrite);
                    element.put(enode);
                } else {
                    JSONObject enode = new JSONObject();
                    String write = relement.getJSONObject(ii).getString("iCalstate");
                    enode.put("iCalstate", write);
                    element.put(enode);
                }
            }

相反,我得到这个它应该只写在第一个元素,其中 id 为 0,但它正在写入每个元素:

{"scene": [
    {
        "id": 0,
        "element": [
            {"iCalstate": "true"},
            {"iCalstate": "false"}
        ]
    },
    {
        "id": 1,
        "element": [
            {"iCalstate": "true"},
            {"iCalstate": "false"}
        ]
    },
    {
        "id": 2,
        "element": [
            {"iCalstate": "true"},
            {"iCalstate": "false"}
        ]
    }
]}

标签: javajson

解决方案


为您的 JSON 创建相应的 POJO。并用于ObjectMapper映射 JSON 字符串并创建实例。然后,您可以在该实例上执行所需的操作。


推荐阅读