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":"男"}}
    }
  
京公网安备 11010502036488号