我正在处理深度嵌套的 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 结构最低元素的路径,以便我可以将其与我的列表进行匹配?
最佳答案
JSON 对象有一个名为 .has 的方法,它将返回一个 boolean 值。所以逻辑就像检查 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)
关于java - 如何在不多次调用 .getJSONObject(key) 的情况下检查 JSONObject 中是否存在属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235071/