JSON 数据格式
Json对象
Json数组
JSON解析方向
在服务器端应用(JavaEE)
将 java 对象/集合转换为 json 格式字符串
在客户端(如安卓端)应用
将 json 格式字符串转换为 java 对象/集合
Json 和 Java 之间转换关系
- JSON 中的对象对应着 Java 中的对象
- Json 中的数组,对应着 Java 中的集合
JSON 解析技术
1.原生技术
① json–> java(待完善)
注:
- 使用原生技术, json 格式字符串转换为 java 对象/集合,是在
安卓开发时的转换
。在JavaSE/EE中没有这些方法???(问题
)。 - 这里需要先根据json字符串创建一个java类(可以使用GsonFormat工具生成java类),要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同。
GsonFormat工具的使用
将json格式的字符串{}转换为Java对象
将json格式的字符串[]转换为Java对象的List
复杂json数据解析
特殊json数据解析
② java–>json
通过java封装好的jar工具包,直接将java对象或集合转换成json格式的字符串。
使用工具包:Jsonlib
,一个Java 类库,需要导入多个jar包。
准备一个User类:
public class User {
private int id;
private String name;
private int age;
private String sex;
public User(int id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
将Java对象转换为json字符串{} Java对象 --> Json对象
@Test
public void test1(){
//将Java对象转换为json字符串{} Java对象 --> Json对象
User user = new User(1, "李白", 18, "男");
JSONObject jsonObject = JSONObject.fromObject(user);
String json = jsonObject.toString();
System.out.println(json);
}
将Java对象的List转换为json字符串[] Java集合 --> Json数组
@Test
public void test2() {
//将Java对象的List转换为json字符串[] Java集合 --> Json数组
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
JSONArray jsonoArray = JSONArray.fromObject(list);
String json = jsonoArray.toString();
System.out.println(json);
}
将Java对象的Map转换成json字符串{}
@Test
public void test3() {
//将Java对象的Map转换成json字符串{}
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
Map<String, User> map = new HashMap<>();
map.put("user1", user1);
map.put("user2", user2);
JSONObject jsonObject = JSONObject.fromObject(map);
String json = jsonObject.toString();
System.out.println(json);
}
2. Gson框架技术
将Gson的jar包导入到项目中
① json–>java
注: 这里需要先根据json字符串创建一个java类,<mark>要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同</mark>
可以使用工具生成java类
将json格式的字符串{}转换为Java对象
@Test//将json格式的字符串{}转换为Java对象
public void test1(){
String json = "{\"id\":1, \"name\":\"李白\", \"age\":18, \"sex\":\"男\"}";
//创建Gson对象
Gson gson = new Gson();
//通过调用Gson对象的fromJson()方法,返回该JSON数据对应的Java对象
User user = gson.fromJson(json, User.class);
System.out.println(user);
}
将json格式的字符串[]转换为Java对象的List
@Test //将json格式的字符串[]转换为Java对象的List
public void test2(){
String json="[{\"age\":18,\"id\":1,\"name\":\"李白\",\"sex\":\"男\"},{\"age\":19,\"id\":2,\"name\":\"杜甫\",\"sex\":\"男\"}]";
//创建Gson对象
Gson gson = new Gson();
//通过调用Gson对象的fromJson()方法,返回该JSON数据对应的Java集合
List<User> userList = gson.fromJson(json, new TypeToken<List<User>>() {}.getType());
System.out.println(userList);
}
② java–>json
准备一个User类:
public class User {
private int id;
private String name;
private int age;
private String sex;
public User(int id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
将Java对象转换为json字符串{}
@Test//将Java对象转换为json字符串{}
public void test3() {
User user = new User(1, "李白", 18, "男");
//创建Gson对象
Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json);
}
将Java对象的List转换为json字符串[]
@Test//将Java对象的List转换为json字符串[]
public void test4() {
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
//创建Gson对象
Gson gson = new Gson();
String json = gson.toJson(list);
System.out.println(json);
}
将Java对象的Map转换为json字符串{}
@Test//将Java对象的Map转换为json字符串{}
public void test5() {
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
Map<String, User> map = new HashMap<>();
map.put("user1", user1);
map.put("user2", user2);
//创建Gson对象
Gson gson = new Gson();
String json = gson.toJson(map);
System.out.println(json);
}
3. FastJson框架技术
导入fastjson的jar包
① json–>java
注: 这里需要先根据json字符串创建一个java类,<mark>要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同</mark>
可以使用工具生成java类
将json格式的字符串{}转换为Java对象
@Test//将json格式的字符串{}转换为Java对象
public void test1(){
String json = "{\"id\":1, \"name\":\"李白\", \"age\":18, \"sex\":\"男\"}";
//直接调用静态方法解析
User user = JSONObject.parseObject(json, User.class);
System.out.println(user);
}
将json格式的字符串[]转换为Java对象的List
@Test //将json格式的字符串[]转换为Java对象的List
public void test2(){
String json="[{\"age\":18,\"id\":1,\"name\":\"李白\",\"sex\":\"男\"},{\"age\":19,\"id\":2,\"name\":\"杜甫\",\"sex\":\"男\"}]";
List<User> user = JSONObject.parseArray(json, User.class);
System.out.println(user);
}
② java–>json
准备一个User类:
public class User {
private int id;
private String name;
private int age;
private String sex;
public User(int id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
将Java对象转换为json字符串{}
将Java对象的List转换为json字符串[]
将Java对象的Map转换为json字符串{}
@Test//将Java对象转换为json字符串{}
public void test3() {
User user = new User(1, "李白", 18, "男");
String json = JSONObject.toJSONString(user);
System.out.println(json);
}
@Test//将Java对象的List转换为json字符串[]
public void test4() {
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
String json = JSONObject.toJSONString(list);
System.out.println(json);
}
@Test//将Java对象的Map转换为json字符串{}
public void test5() {
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
Map<String, User> map = new HashMap<>();
map.put("user1", user1);
map.put("user2", user2);
String json = JSONObject.toJSONString(map);
System.out.println(json);
}
4.Jackson技术
Jackson:springmvc转换默认使用jackson,它是SpringMVC框架内置的工具包。
java–>json
使用步骤:
-
导入相关jar包
-
创建java对象或集合
-
使用jackson的ObjectMapper对象的writeValueAsString方法进行转换
示例:
准备一个User类
public class User {
private int id;
private String name;
private int age;
private String sex;
public User(int id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
将Java对象转换为json字符串{}
@Test//将Java对象转换为json字符串{}
public void test3() throws JsonProcessingException {
User user = new User(1, "李白", 18, "男");
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);
}
将Java对象的List转换为json字符串[]
@Test//将Java对象的List转换为json字符串[]
public void test4() throws JsonProcessingException {
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
System.out.println(list);
//[User{id=1, name='李白', age=18, sex='男'}, User{id=2, name='杜甫', age=19, sex='男'}]
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(list);
System.out.println(json);
//[{"id":1,"name":"李白","age":18,"sex":"男"},{"id":2,"name":"杜甫","age":19,"sex":"男"}]
}
将Java对象的Map转换为json字符串{}
@Test//将Java对象的Map转换为json字符串{}
public void test5() throws JsonProcessingException {
User user1 = new User(1, "李白", 18, "男");
User user2 = new User(2, "杜甫", 19, "男");
Map<String, User> map = new HashMap<>();
map.put("user1", user1);
map.put("user2", user2);
System.out.println(map);
//{user1=User{id=1, name='李白', age=18, sex='男'}, user2=User{id=2, name='杜甫', age=19, sex='男'}}
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(map);
System.out.println(json);
//{"user1":{"id":1,"name":"李白","age":18,"sex":"男"},"user2":{"id":2,"name":"杜甫","age":19,"sex":"男"}}
}