JSON(JavaScript Object Notation)
概念
- json是轻量级的数据交换格式
- 独立于语言的文本格式
语法规则
JSON是由‘名称/值’对组成的集合,’名称/值‘格式例如,“key”:value。
JSON的值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。
json两种结构
对象
是一个无序的“‘名称/值’对”集合。
格式例如,{“key1”:value1,“key2”:value2,“key3”:value3,…}。
数组
是值(value)的有序集合。
格式例如,[{“key1”:value1,“key2”:value2,“key3”:value3},{“key1”:value1,“key2”:value2,“key3”:value3}…]。
json解析(四种解析方式,此处讲解JackJson)
Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”。
Jackson框架包含了3个核心库:streaming,databind,annotations。
-Maven环境下导JaskJson依赖包
- 定义一个对象
public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
- java对象转json对象
public class JSONUtil {
private static final ObjectMapper MAPPER=new ObjectMapper();
public static String serialize(Object o){
try {
return MAPPER.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new RuntimeException("java对象序列化json字符串对象失败"+o);
}
}
/**
* java对象序列化为json字符串对象
* @param args
*/
public static void main(String[] args) {
//初始化一个对象
Person person=new Person();
person.setId(1);
person.setName("zpf");
person.setAge(20);
//java序列化为json字符串对象
String jsonObj=serialize(person);
System.out.println(jsonObj);
}
}
- java对象转json数组
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
public class JSONUtil {
private static final ObjectMapper MAPPER=new ObjectMapper();
public static String serialize(Object o){
try {
return MAPPER.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new RuntimeException("java对象序列化json字符串对象失败"+o);
}
}
/**
* java对象序列化为json字符串数组
* @param args
*/
public static void main(String[] args) {
List<Person> list=new ArrayList<>();
//初始化多个对象
Person person1=new Person();
person1.setId(1);
person1.setName("zpf");
person1.setAge(20);
list.add(person1);
Person person2=new Person();
person2.setId(2);
person2.setName("pfz");
person2.setAge(30);
list.add(person2);
Person person3=new Person();
person3.setId(3);
person3.setName("fpz");
person3.setAge(30);
list.add(person3);
//java序列化为json字符串对象
String jsonlist=serialize(list);
System.out.println(jsonlist);
}
}
- json对象转java对象
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JSONUtil {
private static final ObjectMapper MAPPER=new ObjectMapper();
public static String serialize(Object o){
try {
return MAPPER.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new RuntimeException("java对象序列化json字符串对象失败"+o);
}
}
/**
* 反序列化操作,将输入流/字符串序列化为java对象
* @param json 输入流
* @param clazz 指定要反序列化的类型
* @param <T>
* @return 返回反序列化的对象
*/
public static <T> T deserialize(String json, Class<T> clazz){
try {
return MAPPER.readValue(json,clazz);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("json反序列化失败:"+clazz.getName());
}
}
public static void main(String[] args) {
//初始化一个对象
Person person=new Person();
person.setId(1);
person.setName("zpf");
person.setAge(20);
//java序列化为json字符串对象
String jsonObj=serialize(person);
System.out.println(jsonObj);
//将json字符串对象转java对象
Person personObj=deserialize(jsonObj,Person.class);
System.out.println(personObj.toString());
}
}
- json对象转java数组
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class JSONUtil {
private static final ObjectMapper MAPPER=new ObjectMapper();
public static String serialize(Object o){
try {
return MAPPER.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new RuntimeException("java对象序列化json字符串对象失败"+o);
}
}
/**
* 反序列化操作,将输入流/字符串序列化为java对象
* @param json 输入流
* @param clazz 指定要反序列化的类型
* @param <T>
* @return 返回反序列化的对象
*/
public static <T> T deserialize(String json, Class<T> clazz){
try {
return MAPPER.readValue(json,clazz);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("json反序列化失败:"+clazz.getName());
}
}
public static void main(String[] args) {
List<Person> list=new ArrayList<>();
//初始化多个对象
Person person1=new Person();
person1.setId(1);
person1.setName("zpf");
person1.setAge(20);
list.add(person1);
Person person2=new Person();
person2.setId(2);
person2.setName("pfz");
person2.setAge(30);
list.add(person2);
Person person3=new Person();
person3.setId(3);
person3.setName("fpz");
person3.setAge(30);
list.add(person3);
//java序列化为json字符串对象
String jsonlist=serialize(list);
System.out.println(jsonlist);
//json字符串对象转化为java数组
Person[] persons=deserialize(jsonlist,Person[].class);
for (Person person:persons)
System.out.println(person.toString());
}
}