官方文档:https://github.com/FasterXML/jackson-databind
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。
//将json字符串转成对象
ObjectMapper mapper = new ObjectMapper();
//日期输出格式
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
mapper.setDateFormat(outputFormat);
mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
// 在遇到未知属性的时候不抛出异常
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Person person = mapper.readValue("{\"name\":\"Bob\", \"age\":13, \"nowDate\":\"2020-07-03\", \"mon\":\"未知属性\"}", Person.class);
System.out.println(person.toString());
Map<String, Object> map = mapper.readValue("{\"name\":\"Bob\", \"age\":13, \"nowDate\":\"2020-07-03\"}", Map.class);
System.out.println(map);
List<Person> persons = mapper.readValue("[{\"name\":\"Bob\", \"age\":13},{\"name\":\"Lala\", \"age\":15}]", List.class);
System.out.println(persons);
Person[] personArr = mapper.readValue("[{\"name\":\"Bob\", \"age\":13},{\"name\":\"Lala\", \"age\":15}]", Person[].class);
Arrays.stream(personArr).forEach(System.out :: print);
System.out.println();
List<Person> personList = mapper.readValue("[{\"name\":\"Bob\", \"age\":13},{\"name\":\"Lala\", \"age\":15}]", new TypeReference<List<Person>>() {});
System.out.println(personList);
System.out.println("==============obj2JsonStr=============");
//将对象转成json字符串
String jsonString = mapper.writeValueAsString(person);
System.out.println(jsonString);
String mapJson = mapper.writeValueAsString(map);
System.out.println(mapJson);
String listJson = mapper.writeValueAsString(personList);
System.out.println(listJson);
将json转成树结构来操作
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree("{\"name\":\"Bob\", \"age\":13}");
String name = rootNode.get("name").asText();
System.out.println(name);
int age = rootNode.get("age").asInt();
System.out.println(age);
ObjectNode newNode = mapper.createObjectNode();
newNode.setAll((ObjectNode)rootNode);
newNode.put("sex", "1");
newNode.with("other").put("type", "student");
String json = mapper.writeValueAsString(newNode);
System.out.println(json);
官网文档:https://github.com/FasterXML/jackson-databind
注解使用手册
@Setter
@Getter
@ToString
@JsonIgnoreProperties(value={ "foo" }, ignoreUnknown=true)//忽然json字符串中的属性(对象字段的别名),
// ignoreUnknown忽略字段不匹配情况,相当于mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
public class Person {
@JsonProperty("name")//取别名对应json中属性
private String username;
private int age;
@JsonIgnore// 序列化和反序列化时忽略该字段
private String bar;
@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")//注解格式化日期格式
private Date date;
}
//将json字符串转成对象
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue("{\"name\":\"Bob\", \"age\":13, \"foo\":\"foo\", \"bar\":\"bar\", \"date\":\"2020-07-03\"}", Person.class);
System.out.println(person.toString());
System.out.println("==============obj2JsonStr=============");
//将对象转成json字符串
String jsonString = mapper.writeValueAsString(person);
System.out.println(jsonString);
https://www.jianshu.com/p/135d8dd265d6
官方文档:https://github.com/google/gson/blob/master/UserGuide.md
Google提供的用来java对象和JSON数据之间进行映射的JAVA类库,可以将一个JSON字符转成一个java对象,反过来也OK。
GSON可按需解析,即创建的JavaBean类不用完全对应Json数据里面的所有key
//将json字符串转成对象
Gson gson = new Gson();
Person person = gson.fromJson("{\"name\":\"Bob\", \"age\":13, \"nowDate\":\"2020-07-03\", \"mon\":\"未知属性\"}", Person.class);
System.out.println(person.toString());
Map<String, Object> map = gson.fromJson("{\"name\":\"Bob\", \"age\":13, \"nowDate\":\"2020-07-03\"}", Map.class);
System.out.println(map);
List<Person> persons = gson.fromJson("[{\"name\":\"Bob\", \"age\":13},{\"name\":\"Lala\", \"age\":15}]", List.class);
System.out.println(persons);
Person[] personArr = gson.fromJson("[{\"name\":\"Bob\", \"age\":13},{\"name\":\"Lala\", \"age\":15}]", Person[].class);
Arrays.stream(personArr).forEach(System.out :: print);
System.out.println();
List<Person> personList = gson.fromJson("[{\"name\":\"Bob\", \"age\":13},{\"name\":\"Lala\", \"age\":15}]", new TypeToken<Collection<Person>>(){}.getType());
System.out.println("==============obj2JsonStr=============");
//将对象转成json字符串
String jsonString = gson.toJson(person);
System.out.println(jsonString);
String mapJson = gson.toJson(map);
System.out.println(mapJson);
String personJson = gson.toJson(personList);
System.out.println(personJson);
// json解析器,解析json数据
JsonElement element = JsonParser.parseString("{\n" +
" \"sex\": '男',\n" +
" \"hobby\":[\"baskte\",\"tennis\"],\n" +
" \"introduce\": {\n" +
" \"name\":\"tom\",\n" +
" \"age\":23\n" +
" }\n" +
" }");
// json属于对象类型时
if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject(); // 转化为对象
// 1. value为string时,取出string
String sex = object.get("sex").getAsString();
System.out.println("sex:" + sex);
// 2. value为array时,取出array
JsonArray hobbies = object.getAsJsonArray("hobby"); //
for (int i = 0; i < hobbies.size(); i++) {
String hobby = hobbies.get(i).getAsString();
System.out.println("hobby:" + hobby);
}
// 3. value为object时,取出object
JsonObject introduce = object.getAsJsonObject("introduce");
String name = introduce.get("name").getAsString();
int age = introduce.get("age").getAsInt();
System.out.println("name:" + name+";age:" + age);
FastJson是阿里巴巴公司提供的一个用Java语言编写的高性能功能完善的JSON库
缺陷:
很多漏洞
String time = "2070-01-01 00:00:00";//会报错
String time = "1970-01-01 00:00:00.000000000.000000000";//能正常使用
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
jsonObject.put("time", time);
Timestamp timestamp = jsonObject.getTimestamp("time");
System.out.println("time:" + timestamp);