我是一名java程序员,如果我的问题有点愚蠢,我很抱歉。
我有一个JSON对象,看起来像这样:
{
"element1" : {
"generated_name_1": {
"a" : {"isReady":false}
},
"generated_name_2":{},
"generated_name_3":{},
"generated_name_4":{}
},
"element2" : {
"generated_name_5" : {
"a" : {"isReady":false},
"g" : {"isReady":false}
}
},
"element3" : {
"a" : { "isReady":false},
"n":{}
}
}
我想遍历并删除每个与之关联的空值元素,比如“generated_name_2”和“n”。我不知道这些元素的名称是什么,也不知道它嵌套在JSON树中有多远。
我知道我必须写一个递归程序,这就是我想到的:
public static void cleanJsonNodes(ObjectNode myJsonNode){
for (JsonNode currentNode : myJsonNode){
if (currentNode.size() == 0){
myJsonNode.remove(currentNode);
} else {
cleanJsonNodes((ObjectNode)currentNode);
}
}
}
当然,这是行不通的,但我真的不确定从这里去哪里,我在互联网上搜索也没有用。
请有人帮帮我!
看看这个
如何在jackson中不发送空集合
对于Json中的空节点,您可以使用
http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/node/ObjectNode.html#remove(java.lang.String)
使用jackson删除JSON元素
这些可以解决你的问题。
我只想说明如何使用Json实现这一点:
JSONObject jsonObj = new JSONObject(_message);
Map<String, JSONObject> map = jsonObj.getMap();
Iterator<String> it = map.keySet().iterator();
while(it.hasNext()){
String key = it.next();
JSONObject o = map.get(key);
if(o.length() == 0){
it.remove();
}
}
当JSONObject
加载{}
时,它的长度为0,因此您可以删除它。
作为补充说明,您可以在递归中使用此方法,如:
JSONObject jsonObj = new JSONObject(_message);
invoke(jsonObj);
...
private static void invoke(JSONObject jsonObj) {
Map<String, JSONObject> map = jsonObj.getMap();
Iterator<String> it = map.keySet().iterator();
while(it.hasNext()){
String key = it.next();
JSONObject o = map.get(key);
if(o.length() == 0){
it.remove();
}
else{
invoke(o);
}
}
}
我没有添加任何验证但可以肯定的是,您需要验证jsonObj.getMap()
的实例...
我还没有测试过,但你可能想要这样的东西:
public static void stripEmpty(JsonNode node) {
Iterator<JsonNode> it = node.iterator();
while (it.hasNext()) {
JsonNode child = it.next();
if (child.isObject() && child.isEmpty(null))
it.remove();
else
stripEmpty(child);
}
}
输入: 如何删除列顺序中没有值的记录? 期望输出: 我当前的XSL只删除空节点 我似乎无法掌握模板匹配来删除整个“记录”标签。。。非常感谢你!
问题内容: 我有一个像下面这样的json: 我只想将此JSON转换为其他JSON。我想从JSON中删除“ _ 元数据”和“ _some”节点。我正在使用JSON.NET。 问题答案: 我刚结束反序列化到JObject并递归地循环遍历以删除不需要的字段。这是那些有兴趣的人的功能。
我知道这可能是一个重复,但仍然张贴我的问题,因为我找不到确切的答案我在寻找什么。我有一个json对象(或字符串)如下。 我将从RESTAPI测试中得到相同类型的响应,但是在每次调用之后,“timestamp”键将具有一个动态日期和时间值,该值与调用的时间有关。在这里,我使用JSONAssert将我的expect json与实际json作为一个整体进行比较。因为时间戳值不同,所以对我来说总是失败。
我正在使用Firebase作为web应用程序。它是用纯Javascript编写的,不使用外部库。 我可以“推送”并使用“.on(”child_added“)”检索数据,但是“.remove()”不能按照它所说的方式工作。根据 API, “Firebase.remove()-删除此Firebase位置的数据。子位置的任何数据也将被删除。删除的效果将立即可见。” 然而,移除不是立即发生的;只有在整个脚
问题内容: 尝试删除不为空的文件夹时,出现“访问被拒绝”错误。我尝试使用以下命令:。 删除/删除不为空的文件夹/目录的最有效方法是什么? 问题答案: 标准库参考:shutil.rmtree。 根据设计,在包含只读文件的文件夹树上失败。如果要删除该文件夹而不管它是否包含只读文件,请使用
本文向大家介绍python如何删除列为空的行,包括了python如何删除列为空的行的使用技巧和注意事项,需要的朋友参考一下 1.摘要 dropna()方法,能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回。 2.函数详解 函数形式:dropna(axis=0, how='any', thresh=None, subset=None