zoukankan      html  css  js  c++  java
  • 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值
    }
    
  • 相关阅读:
    CentOS(九)--与Linux文件和目录管理相关的一些重要命令①
    CentOS(八)--crontab命令的使用方法
    CentOS(七)--Linux文件类型及目录配置
    CentOS(六)--Linux系统的网络环境配置
    ActionBar实现顶部返回键,顶部按钮
    安卓---高德地图API应用
    安卓---achartengine图表----简单调用----使用view显示在自己的布局文件中----actionBar的简单设置
    安卓访问webAPI,并取回数据
    webAPI---发布(IIS)--发布遇到问题(500.19,500.21,404.8,404.3)
    安卓----短信验证(借用第三方平台)
  • 原文地址:https://www.cnblogs.com/fengxiaoqi/p/12873539.html
Copyright © 2011-2022 走看看