JSON解析

JSON(JavaScript Object Notation)

概念
  1. json是轻量级的数据交换格式
  2. 独立于语言的文本格式
语法规则

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());
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值