记录Fastjson和Jackson两个最常用的json库的使用方法
maven依赖
Fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>x.x.x</version>
</dependency>
Jackson
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>x.x.x</version>
</dependency>
POJOs to JSON and back
Fastjson
Model model = new Model();
//POJOs to JSON
String json = JSON.toJSONString(obj);
//JSON to POJOs
Model model2 = JSON.parseObject(json, Model.class);
Jackson
//create once, reuse
ObjectMapper mapper = new ObjectMapper();
//POJOs to JSON
String jsonString = mapper.writeValueAsString(myResultObject);
//JSON to POJOs
value = mapper.readValue(jsonString, XXX.class);
Map and List
Fastjson
Map<String, Integer> map = JSON.parseObject(mapStr, Map.class);
List<String> list = JSON.parseArray(listStr, XXX.class);
Jackson
Map<String, Integer> scoreByName = mapper.readValue(jsonSource, Map.class);
List<String> names = mapper.readValue(jsonSource, List.class);
Generic
Fastjson
List<Model> list = JSON.parseObject(jsonStr, new TypeReference<List<Model>>(){});
Jackson
Map<String, ResultValue> results = mapper.readValue(jsonSource, new TypeReference<Map<String, ResultValue>>() { } );
Tree Model
Fastjson
JSONObject jsonObj = JSON.parseObject(jsonStr);
Jackson
// can be read as generic JsonNode, if it can be Object or Array; or,
// if known to be Object, as ObjectNode, if array, ArrayNode etc:
ObjectNode root = mapper.readTree("stuff.json");
String name = root.get("name").asText();
int age = root.get("age").asInt();
Annotations
FastJson
@JSONField(name="ID")
@JSONField(format="yyyyMMdd")
@JSONField(serialize=false)
Jackson
@JsonProperty("name")
@JsonIgnore