Как эффективно добавлять значения во вложенный json, когда данные не определены

#java #json #database

Вопрос:

У меня есть сервер, когда он получает сообщение, подобное abc/xyz=yo тому, что я хочу, это проверить существующий файл json, и если он уже существует, он обновит файл новым значением(просто для информации. / означает создание вложенных объектов и значение после = — это значение, которое мы хотим поместить в json.

Я могу легко создать json, если нет никакого значения, но проблема возникает, когда я пытаюсь проверить, содержит ли объект json это. Я могу использовать if(object.has(..)) в for цикле, но я не могу редактировать вложенный объект, например

 //abc/xyz would be spited into String[] children = string.split("/"))


JSONObject object = new JSONObject(myJSONString);
JSONObject tmpObjext = object.getJSONObject("root")
for(int i=0;i=children.length;i  ){
if(object.has(children[i]){
tmpObject = tmpObject.getJSONObject(children[i[)

/*let the initial json be like 
{"root":{"abc":{"xyz"="yo"}}}
so the above code will return the final object i.e. {"xyz":"yo"}


so I tried getting rest of the children i.e. "abc"
and create a new json with updated value but as it
would be user generated I don't know how many
times it would be nested (in this case it's nested
twice once to add it to root and once to acc xyz to abc)

so I'll again have {"abc":{"xyz":"yo"}} so that I
can put it in main object like object.put("root",newJSON) but this would create
problem if there were multiple objects in it like 
{"abc":{"xyz":"yo"}{"pqr":"yoi"}} so if I just
changed the xyz value and regenerate json and put
in root it will just put updated value of xyz and
remove the pqr field. 

*/
}
}
 

Ответ №1:

Я понял, как мы можем это сделать. вам просто нужно создать нужный объект, а затем снова создать другой JSONObject и приравнять его к оригинальному, например

 JSONObject o1 = new JSONObject(yourJSON);
JSONObject o2 = o1.getJSONObject("yourRootIfAny");
 

затем вы можете использовать o2 для запроса таких вещей, как

 for (your children){
if(o2.has(child)){
o2 = o2.getJSONObject(child)
}
}
 

для получения более подробной информации вы можете проверить это.