fastjson获取复杂json所有叶子节点键值

1 篇文章 0 订阅
1 篇文章 0 订阅

最近需要把一个Json里面的所有键值对给拿出来,也就是把复杂Json的层次结构给去除,只留下叶子节点的键值,方便我们循环输出。这里只是输出了键值对,如有需要请把键值对存成数组。

这里采用递归的方式去遍历打印叶子节点。
代码如下:

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * @date 2019/11/27 10:29
 */
public class JsonMap {
    public static void main(String[] args) throws Throwable {
        String dataJson = "{\"region\":\"hunan\",\"time\":\"2019-11-09 15:05:26\",\"BoundingBox\":{\"coordinates\":[[[122.00749,49.721016],[127.629456,49.07307],[120.820076,45.93104],[115.49415,46.546955],[122.00749,49.721016]]],\"type\":\"polygon\"}}";
        JSONObject jb = JSONObject.parseObject(dataJson);
        printNode(jb);

    }

    public static void printNode(JSONObject jb){
        for(String key : jb.keySet()) {
            if(jb.get(key) instanceof JSONObject){
                JSONObject childJb = JSONObject.parseObject(String.valueOf(jb.get(key)));
                printNode(childJb);
            }else if(jb.get(key) instanceof JSONArray){
                JSONArray childArr = (JSONArray) jb.get(key);
                System.out.println(key+":"+childArr);
            }else{
                System.out.println(key+":"+jb.get(key));
            }

        }
    }
}

由于键是不固定的,所以采用判断节点的类型:
1、如果是JSONObject,表示还没有到底层,继续递归;
2、如果是JSONArray,表示是一个数组对象,我们直接拿出来就行;
3、如果是String类型,表示是根节点,直接输出。

测试数据如下:

{
  "region": "hunan",
  "time": "2019-11-09 15:05:26",
  "BoundingBox": {
    "coordinates": [
      [
        [
          122.00749,
          49.721016
        ],
        [
          127.629456,
          49.07307
        ],
        [
          120.820076,
          45.93104
        ],
        [
          115.49415,
          46.546955
        ],
        [
          122.00749,
          49.721016
        ]
      ]
    ],
    "type": "polygon"
  }
}

输出如下:

coordinates:[[[122.00749,49.721016],[127.629456,49.07307],[120.820076,45.93104],[115.49415,46.546955],[122.00749,49.721016]]]
type:polygon
time:2019-11-09 15:05:26
region:hunan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值