组装json对象的问题

查询数据库有如下的查询结果
name id remark time data type contain
张三 1 测试 2016 数据1 test1 1
张三 1 测试 2016 数据2 test2 1
张三 1 测试 2016 数据3 test3 1
张三 1 测试 2016 数据4 test4 1
李四 2 测试2 2016 数据99 test66 0
李四 2 测试2 2016 数据98 test66 0
......
现在我想处理数据,形成如下格式
[{name:张三,remark:测试,time:2016,display:[{data:数据1,type:test1},{data:数据2,type:test2},{data:数据3,type:test3},{data:数据4,type:test4}]},{name:李四,remark:测试2,time:2016,display:[{data:数据99,type:test66},[{data:数据98,type:test66}]}]
需要一个比较方便的方法,手动拼接就算了,感谢。

[
  {
    name: 张三,remark:测试,time:2016,display: [
      {
        data: 数据1,type: test1
      },
      {
        data: 数据2,type: test2
      },
      {
        data: 数据3,type: test3
      },
      {
        data: 数据4,type: test4
      }
    ]
  },
  {
    name: 李四,remark:测试2,time:2016,display: [
      {
        data: 数据99,type: test66
      },
      [
        {
          data: 数据98,type: test66
        }
      ]
    }
  ]

想到用hashmap,不过没实现,请教各位指点下

阅读 6.7k
8 个回答

题主提出这个问题,是因为还没有序列化和反序列化的概念。
序列化是将一个对象转换为某种特定格式数据的过程,比如将一个java实例转化为xml或者json(或者其他规范)字符串。反序列化过程相反,是将一个xml、json(或者其他规范)转为一个java对象。

具体针对json的序列化和反序列化来讲,个人认为有两种方式
1.自己实现,比如使用反射等方式完成这种方式最终还是拼接字符串,属于自己造轮子了
2.使用现有的json库,比如gson,jackson,fastjson等,他们提供了比较简单的序列化和反序列化的接口。
比如使用fastjson,可以类似这种风格实现序列化(伪代码)

List<User> list = new List<User>();
list.add(new User());
list.add....
String jsonStr = Json.toJsonString(list);

反序列化类似

搜索Gson

Sting str = new Gson().toJson(obj)

先组装成一个Java Bean,然后使用一些JSON序列化的工具,常用的有Jackson,fastjson,Gson等。

新手上路,请多包涵

可以用hashmap,放到list之后,再放到map中,通过Gson转化。
比如
Map<String,Stirng> nameMap = new HashMap<String,String>();
nameMap .put(name,"张三");
nameMap .put(remark,"售货员");
Map<String,Stirng> dataMap= new HashMap<String,String>();
List dataList =new ArrayList();
for(int i=0;i<=4;i++){
dataMap.put("data","数据1");
dataMap.put("type","666");
}
dataList.add(dataMap);
nameMap.put(display,dataList);
String s = new Gson().toJson(nameMap);
代码稍微调整一下应该能运行。

可以尝试各种工具类 Gson是个不错的选择

java有那么多将对象序列化为json字符串为啥不用呢

public class JsonUtils{
    
  private static final ObjectMapper mapper = new ObjectMapper();
  public static String Object2Json(Object o)throws BusinessException{
    StringWriter writer = new StringWriter();
    try {
      mapper.writeValue(writer, o);
    } catch (IOException e) {
      e.printStackTrace();
      throw new BusinessException(0, "Entity转换成Json时出现异常。", e);
    }
    return writer.toString();
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题