JSON学习笔记

概念

JavaScript Object Notation,JavaScript对象表示法

用于存储和交换文本信息的语法,进行数据的传输。

类似于XML,比XML更小、更快、更易解析。

//这就是一个JSON
var p = {"name":"zs","age":18,"gender":"男"}

语法

1. 基本规则

  • 数据在键值对中:JSON数据是由键值对构成
    • 键可以用双引号、单引号、也可以不用引号
    • 值的取值类型
      1. 数字:整数、浮点数
      2. 字符串:双引号引起来
      3. 逻辑值:true、false
      4. 数组:方括号括起来
      5. 对象:花括号括起来,可以是JSON对象,对象中可以包含数组,数组中可以包含对象,可以相互嵌套
      6. null
  • 键值对由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

2. 获取数据

  1. json对象.键名
  2. json对象["键名"]
  3. 数组对象[索引]
//语法
var person = {"name":"zs","age":18,"gender":"男"};
var persons={
    "persons":[
        {"name":"zs","age":18,"gender":"男"},
        {"name":"ls","age":19,"gender":"男"},
        {"name":"ww","age":17,"gender":"男"}
    ]
};
var ps = [
    {"name":"zs","age":18,"gender":"男"},
    {"name":"ls","age":19,"gender":"男"},
    {"name":"ww","age":17,"gender":"男"}
];

//获取ww的name值
var namew = persons.persons[2].name;

3. 遍历

var person = {"name":"zs","age":18,"gender":"男"};

//获取person对象中所有的键值
for (var key in person){
    alert(key+":"+person[key]);//这里的key是一个字符串
}
var ps = [
    {"name":"zs","age":18,"gender":"男"},
    {"name":"ls","age":19,"gender":"男"},
    {"name":"ww","age":17,"gender":"男"}
];

//获取ps中的所有对象的所有键值
for (var i = 0; i < ps.length; i++){
    var p = ps[i];
    for (var key in p){
        alert(key+":"+p[key]);//这里的key是一个字符串
    }
}

JSON数据和java对象的相互转换

解析器

JSON常见解析器:Jsonlib、Gson、fastjson、jackson

这里先学习jackson,是SpringMVC内置的解析器

使用步骤

  1. 导入jar包
  2. 创建Jackson核心对象ObjectMapper
  3. 电泳ObjectMapper的相关方法进行转换

1. java对象转换JSON

//首先创建一个实体类,并生成getter、setter、toString方法
public class Person {
    private String name;
    private int age;
    private String gender;
}
//java对象转换为JSON字符串
@Test   //可以使用单元测试
public void test1() throws JsonProcessingException {//抛出异常
    
    //1.创建Person对象
    Person person = new Person();
    person.setName("张三");
    person.setAge(18);
    person.setGender("男");

    //2.创建Jackson的核心对象ObjectMapper
    ObjectMapper objectMapper = new ObjectMapper();

    //3.转换
    String json = objectMapper.writeValueAsString(person);
    System.out.println(json);//打印出  {"name":"张三","age":18,"gender":"男"}
转换方法
  1. writeValue(参数1,参数2)
    1. 参数1:
    - File:将object对象转换为JSON字符串,并保存到指定文件中
    - Writer:将object对象转换为JSON字符串,并将json数据填充到字符输出流中
    - OutputStream:将object对象转换为JSON字符串,并将json数据填充到字节输出流中
    2. 参数2:一个object对象

  2. weiteValueAsString(object):将对象转换为json字符串

注解
//为实体类增加一条日期属性,并生成getter、setter、toString方法
public class Person {
    private String name;
    private int age;
    private String gender;
    private Date createTime;
}
    @Test
    public void test2() throws JsonProcessingException {

        //1.创建Person对象
        Person person = new Person();
        person.setName("张三");
        person.setAge(18);
        person.setGender("男");
        person.setCreateTime(new Date());

        //2.创建Jackson的核心对象ObjectMapper
        ObjectMapper objectMapper = new ObjectMapper();

        //3.转换
        String json = objectMapper.writeValueAsString(person);
        System.out.println(json);
        //打印出  {"name":"张三","age":18,"gender":"男","createTime":1589214091828}
        //这里的日期属性单位为毫秒,两种选择,1.不打印该属性 2.格式化该属性
    }
@JsonIgnore//忽略该属性,转换成json字符串时,就不会出现该属性
@JsonFormat(pattern = "yyyy-MM-dd")//格式化属性
//这两个注解放在实体类的createTime属性上或其getter方法上面
复杂java对象转换
  • List:转换完成后是一个数组
  • Map:与对象格式一致

2. JSON转换java对象

//JSON转换为java对象
@Test
public void test3() throws JsonProcessingException {
    //1.初始化JSON字符串
    String json = "{"name":"张三","age":18,"gender":"男"}";//转义字符

    //2.创建ObjectMapper对象
    ObjectMapper objectMapper = new ObjectMapper();

    //3.转换为java对象
    Person person = objectMapper.readValue(json,Person.class);//(json字符串,java类型)
    System.out.println(person);
    //打印出  Person{name='张三', age=18, gender='男', createTime=null} 没有赋crateTime值
}
原文地址:https://www.cnblogs.com/fengxiaoqi/p/12873539.html