java - 如何覆盖包含 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"}
]
}
]}
解决方案
为您的 JSON 创建相应的 POJO。并用于ObjectMapper
映射 JSON 字符串并创建实例。然后,您可以在该实例上执行所需的操作。