如何在不多次调用 .getJSONObject的情况下检查 JSONObject 中是否存在属性?

我正在处理深度嵌套的 JSON 数据。下面是一个简短的示例:


{  

   "timestamp":"123",

   "layers":{  

      "frame_raw":"123",

      "frame":{  

         "frame_frame_interface_id":"0",

         "frame_interface_id_frame_interface_name":"asd",

         ...

      },

      "eth_raw":"123",

      "eth":{  

         "eth_eth_dst_raw":"asd",

         "eth_eth_dst":"asd",

         ...

      },

      "ip_raw":"123",

      "ip":{  

         "ip_ip_version_raw":"4",

         "ip_ip_version":"4",


         "ip_ip_addr_raw":[  

            "asd",

            "asd"

         ],

         "ip_ip_addr":[  

            "1.1.1.1",

            "1.1.1.1"

         ],

         "ip_ip_dst_host":"1.1.1.1"

      }

      ...

   }

   ...

}

我有一个我明确允许的结构列表。应从 JSON 中删除所有其他内容。列表示例:


###frame###

layers.frame_raw

###eth###

layers.eth.eth_eth_dst

layers.eth.eth_eth_src

###ip###

layers.ip.ip_ip_src

layers.ip.ip_ip_dst

layers.ip.ip_ip_src_host

layers.ip.ip_ip_dst_host

layers.ip.ip_ip_version

layers.ip.ip_ip_hdr_len

layers.ip.ip_ip_dsfield

我的问题是,我只能使用“getJSONObject(key)”浏览JSON结构。


如何以“key.key.key...”的形式生成JSON结构中最低元素的路径。以便我可以将其与我的列表匹配?


qq_花开花谢_0
浏览 252回答 3
3回答

qq_遁去的一_1

JSON 对象有一个名为 .has 的方法,它将返回一个布尔值。因此,逻辑类似于检查 JSON 对象是否存在。如果是这样,请检查子节点是否存在更多数据。如果存在数组,则必须获取该数组并使用任何循环在数组中迁移,并执行相同的操作。例如:   if (json.has("ip")) {        JSONObject jsonObject = getJSONObject.getString("ip")        String ip_ip_version_raw = jsonObject.getString("ip_ip_version_raw"));        if (jsonObject.has("ip_ip_addr_raw")){            JSONArray ip_ip_addr_raw = jsonObject.getJSONArray("ip_ip_addr_raw");            for (String s : ip_ip_addr_raw) {                ...            }        }     }参考资料:http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

DIEA

我找到了一个解决方案,因为我的特殊情况下的结构总是,所以结构的深度总是相同的,而不是可变的。layers.layer.property对于感兴趣的人:for (Iterator<String> layersIterator = jsonObject.getJSONObject("layers").keys(); layersIterator.hasNext(); ) {&nbsp; &nbsp; String layer = layersIterator.next();&nbsp; &nbsp; for (Iterator<String> propertyIterator = jsonObject.getJSONObject("layers").getJSONObject(layer).keys(); propertyIterator.hasNext(); ) {&nbsp; &nbsp; &nbsp; &nbsp; String property = propertyIterator.next();&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("layers."+layer+"."+property);&nbsp; &nbsp; }}

慕尼黑8549860

如果要检查属性是否存在,则有一个名为 的方法。这是官方文档的链接。JSONObjecthas
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java