JSON学习

JSON学习

概念

JSON(JavaScript Object Notation,JavaScript对象表示法)

将消息用对象封装起来

var p={"name":"张三","age":23,"gender":"M"};

JSON比XML更小、更快、更易解析

语法

  1. 基本规则

    数据在名称/值对中:键用引号引起来,单引号和双引号都可以

    数据的类型:

    1. 数字(整数或浮点数)
    2. 字符串(双引号)
    3. 逻辑值(true/false)
    4. 数组
    5. 对象
    6. null

    数据由逗号分隔

    花括号保存对象

    方括号保存数组

    我们可以直接在JS中定义JSON对象:

        <script>
            var person={"name":"张三","age":23,"gender":"M"};
            alert(person);
        </script>
  2. 获取数据

    1. json对象.键名
    2. json对象["键名"]
    3. json数组对象[索引]

    第一种和第二种的区别就是第一种方法,键名不需要加引号,而第二种方法需要

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

JSON一般被当做传输时数据的存储格式

Java对象转换为Json

JSON解析器是一个工具类,常用的有:Jsonlib\Gson(谷歌)\fastjson(阿里)\jackson(springMVC框架中内置)

这里我们使用jackson,使用步骤为:

  1. 导入jackson的相关jar包

  2. 创建jackson核心对象ObjectMapper

  3. 调用ObjectMapper相关方法进行转化

    示例:

    //1.创建Person对象
            Person p=new Person();
            p.setAge(23);
            p.setName("张三");
            p.setGender("M");
            //2.创建jackson核心对象ObjectMapper
            ObjectMapper mapper=new ObjectMapper();
            //3.转换
            /*
            转换方法:
            1. mapper.writeValue(参数1,obj);
                参数1:
                    File:将Obj对象转换为JSON字符串,并保存到指定的文件中
                    Writer:将Obj对象转换为JSON字符串,并将JSON数据填充到字符输出流中
                    OutputStream:将Obj对象转换为JSON字符串,并将JSON数据填充到字节输出流中
            2. mapper.writeValueAsString(obj);//将对象转换为JSON字符串
    
            输出的字符串是{"name":"张三","age":23,"gender":"M"}
             */

注解:添加在Java对象的属性上

  1. @JsonIgnore:用于排除属性,对应的属性就不会被转换到JSON中

  2. @JsonFormat;用于属性值的格式化,也就是对该属性的转换结果的形式进行要求。例如Date类型的数据,如果直接转换的话输出的是毫秒值,显然不是我们想要的,我们可以这样操作:

    @JsonFormat(pattern=“yyyy-MM-dd")

复杂Java对象的转换:集合和数组

List:直接把集合对象传进去,转换出来的就是集合形式的JSON

Map:输出的也是键值对的对象格式的JSON

JSON转为Java对象

这种用的相比上面的那种比较少

同样是使用Jackson,调用的方法是readValue(json字符串,Class类型),这里的Class类型也就是要转换为的Java对象的类型

String json="{\"gender\":\"M\",\"name\":\"张三\",\"age\":23}";
ObjectMapper mapper=new ObjectMapper();
mapper.readValue(json,Person.class);

JSON学习

上一篇:java – Jackson ObjectMapper即使使用NON_NULL也会抛出NullPointerException


下一篇:Json与对象的相互转换