如何在Java应用程序中编组/解组JSON?

时间:2017-02-15 04:07:29

标签: java json

假设我有以下JSON字符串:

{
  "1": {
    "id": "12",
    "name": "xyz"
  },
  "2": {
    "id": "12",
    "name": "xyz"
  },
  "3": {
    "id": "12",
    "name": "xyz"
  },
  "4": {
    "id": "12",
    "name": "xyz"
  },
  "5": {
    "id": "12",
    "name": "xyz"
  },
  "6": {
    "id": "12",
    "name": "xyz"
  }
}

如何从Java应用程序中创建此JSON结构?是否有任何好的库可以帮助编组和解组JSON for Java?

3 个答案:

答案 0 :(得分:0)

使用像jackson-core这样的库,您可以轻松高效地将json转换为对象表示,反之亦然。

例如,您展示的JSON是Map<String,SomeObject>,其中SomeObject将表示如下:

public class SomeObject {
  private String id;
  private String name;
}

如果构造函数使用idname作为地图条目的值,地图将按如下方式填充。

Map<String, SomeObject> map = new LinkedHashMap<>();
map.put( "1", new SomeObject( "12", "xyz" ) );
map.put( "2", new SomeObject( "12", "xyz" ) );
map.put( "3", new SomeObject( "12", "xyz" ) );
map.put( "4", new SomeObject( "12", "xyz" ) );
map.put( "5", new SomeObject( "12", "xyz" ) );
map.put( "6", new SomeObject( "12", "xyz" ) );

现在从Java获取JSON字符串:

String output = new ObjectMapper().writeValueAsString( map );

如果您有JSON字符串并且想要获得对象表示:

ObjectMapper mapper = new ObjectMapper();
Map<String, SomeObject> map = new LinkedHashMap<>();
map = mapper.readValue( json, new TypeReference<Map<String,SomeObject>>(){} );   

显然这是一个基本的概述。阅读他们的github here上托管的Jackson API的文档是明智的。

答案 1 :(得分:0)

我会推荐另一个图书馆:fastjson。与杰克逊相比,它更简单,更快,更小。

Map<String, Object> map = JSON.parseObject(json, Map.class);

答案 2 :(得分:0)

有几个流行的图书馆:杰克逊已经在这里提到过,gson,org.json和其他人 还有一些便利库不处理序列化,但可用于解析,例如https://github.com/jayway/JsonPath。它可能(没有自己测试)可能会慢一点但更方便 如果你没有每秒处理大量的json文档或非常大/ comples文档(或两者),你可能会选择任何看起来很简单的库。如果您处理我提到的案例,您需要在谷歌阅读一些性能测试结果或运行您自己的,如果可能的话。