gpt4 book ai didi

java - 删除java中的JSON节点

转载 作者:行者123 更新时间:2023-12-02 13:04:47 32 4
gpt4 key购买 nike

我尝试删除任意 JSON 的所有值为“null”的节点。

不知何故,我在 JsonPath 上遇到了困难,因此我尝试使用以下代码迭代 JSON:

public static Map<String, Object> toMap(JSONObject object) throws JSONException {
Map<String, Object> map = new HashMap<String, Object>();

Iterator<String> keysItr = object.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Object value = object.get(key);

if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}

else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
map.put(key, value);
if(value.toString().equalsIgnoreCase("NULL")) {
object.remove(key);
}
}
return map;
}

public static List<Object> toList(JSONArray array) throws JSONException {
List<Object> list = new ArrayList<Object>();
for(int i = 0; i < array.length(); i++) {
Object value = array.get(i);
if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}

else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
list.add(value);
}
return list;
}

当我在 JSON 上运行它时,并不是整个元素被删除,因为括号仍然存在。我还想知道,如果我在两个不同的地方有相同名称的 key ,但只想删除一个,这是否可行。

before: {"interests":[{"interestKey1":"Dogs"},{"interestKey2":"Cats"},{"interestKey3":null}]}

after: {"interests":[{"interestKey1":"Dogs"},{"interestKey2":"Cats"},{}]}

我应该如何处理这个问题?

最佳答案

您将从 JsonObject 中删除键值对,而不是从封闭的 JsonArray 中删除。并且一个 JsonObject 本身可以有多个键值对。因此删除一个对象并不会删除整个对象。

jsonObj={"a":"cde","b":"fgh"}

这是一个有效的 jsonObject。当我像 jsonObj.remove("b") 一样从中删除“b”时,只有“a”保留 {"a":"cde"} 并删除“a” "返回 {}

因此,如果您想从 jsonArray 中删除整个 jsonObject,请直接从 jsonArray 中删除它。

在 JsonArray 中,您无法使用键而不是索引来选择 jsonObject。因此,即使它有两个具有相同键的 JsonObject,您也必须通过其唯一索引来选择一个。

关于java - 删除java中的JSON节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197711/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com