JSON 解析

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类,要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同

可以使用工具生成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类,要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同

可以使用工具生成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":"男"}}
    }

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinking in Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值