Java如何将扁平化的数据转化成有层级关系的数据

Liu jie 发布于 01/14 17:06
阅读 259
收藏 1

我开发java项目时,遇到了一个技术问题,我的原始数据如下:

{
  {tb_name:aaa,primary_key:za,key_type:varchar},
  {tb_name:aaa,primary_key:zb,key_type:int},
  {tb_name:bbb,primary_key:zc,key_type:varchar},
  {tb_name:ccc,primary_key:zd,key_type:varchar},
  {tb_name:ddd,primary_key:ze,key_type:int},
  {tb_name:ddd,primary_key:zf,key_type:varchar}
}

我需要把上面的数据转化成下面有层级的数据:

{ 
  {  tb_name:aaa,
     tb_primary_key:[
       {primary_key:za,key_type:varchar},
       {primary_key:zb,key_type:int}
     ]
  },
  {  tb_name:bbb,
     tb_primary_key:[      
       {primary_key:zc,key_type:varchar}
     ]
  },
  {  tb_name:ccc,
     tb_primary_key:[      
       {primary_key:zd,key_type:varchar}
     ]
  },
  {  tb_name:ddd,
     tb_primary_key:[      
       {primary_key:ze,key_type:int},
       {primary_key:zf,key_type:varchar}
     ]
  },
}

用语言描述其实很简单,就是把同一个tb_name下面的所有的primary_key合并起来。请问如何用java实现上述转化啊?在此先谢谢各位高手指点了。

加载中
0
谷歌火狐和IE

迎酆棋牌_[官网入口]根据你的需求改怎么写就怎么写呀,你描述的已经很清楚了。

另外你给的json示例,最外层应该是中括号而不是大括号,value也应该用双引号引起来。

JSON.parseArray(text, JSONObject.class).
        stream()
        .collect(Collectors.groupingBy(x -> x.getString("tb_name")))
        .entrySet()
        .stream().map(x -> {
            JSONObject json = new JSONObject();
            json.put("tb_name", x.getKey());
            x.getValue().forEach(y -> y.remove("tb_name"));
            json.put("tb_primary_key", x.getValue());
            return json;
        }).collect(Collectors.toList());

 

0
L
Liu jie

引用来自“谷歌火狐和IE”的评论

迎酆棋牌_[官网入口]根据你的需求改怎么写就怎么写呀,你描述的已经很清楚了。

另外你给的json示例,最外层应该是中括号而不是大括号,value也应该用双引号引起来。

JSON.parseArray(text, JSONObject.class).
        stream()
        .collect(Collectors.groupingBy(x -> x.getString("tb_name")))
        .entrySet()
        .stream().map(x -> {
            JSONObject json = new JSONObject();
            json.put("tb_name", x.getKey());
            x.getValue().forEach(y -> y.remove("tb_name"));
            json.put("tb_primary_key", x.getValue());
            return json;
        }).collect(Collectors.toList());

 

谢谢您的回复,正在调试您提供的代码,请问您的这个JSON.parseArray的JSON用的是哪个包啊?

谷歌火狐和IE
ali的fastjson
0
会哭的鳄鱼
会哭的鳄鱼

你自己已经描述的那么清晰了,就是代码实现的小事了。代码基本功,这很简单的。

0
网瘾少年徐志摩
网瘾少年徐志摩

说出问题就已经解决了一半

返回顶部
顶部

页面底部区域 foot.htm