JSON 数据格式

Json对象

Json数组

JSON解析方向

在服务器端应用(JavaEE)

将 java 对象/集合转换为 json 格式字符串

在客户端(如安卓端)应用

将 json 格式字符串转换为 java 对象/集合

Json 和 Java 之间转换关系

  1. JSON 中的对象对应着 Java 中的对象
  2. Json 中的数组,对应着 Java 中的集合

JSON 解析技术

1.原生技术

① json–> java(待完善)

注:

  1. 使用原生技术, json 格式字符串转换为 java 对象/集合,是在安卓开发时的转换。在JavaSE/EE中没有这些方法???(问题)。
  2. 这里需要先根据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

使用步骤:

  1. 导入相关jar包

  2. 创建java对象或集合

  3. 使用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":"男"}}
    }