JSON
   
    
     概念
    
    
    JavaScript Object Notation :JavaScript对象表示法(早期:在JavaScript中,用json来表示对象)
    
    例:var p = {“name”:“张三”,“age”:“23”,“gender”:“男”};
    
    json:现在多用于存储和交换文本信息的语法,类似于xml。进行数据传输,由于数据量比较小,比较有优势。
    
    
     语法
    
    
    1.基本规则
    
    数据在名称/值对中:json数据是由键值对构成的键用引号(单双都行)引起来,也可以不使用引号。
    
    值得取值类型:
    
    1. 数字(整数或浮点数)
    
    2. 字符串(在双引号中)
    
    3. 逻辑值(true 或 false)
    
    4. 数组(在方括号中) {“persons”:[{},{}]}(可以内含多个person)
    
    5. 对象(在花括号中) {“address”:{“province”:“陕西”…}}
    
    6. null
    
    数据由逗号分隔:多个键值对由逗号分隔
    
    花括号保存对象:使用{}定义json 格式
    
    方括号保存数组:[]
    
    定义格式:
    
    这个代表的是一个键中它的值是一个数组,而该数组中,又是多个对象
    
    
    这个代表的是一个数组,该数组里面有多个对象
    
    
    
    
     获取对象
    
    
    1.json对象.键名
    
    2. json对象[“键名”]
    
    例var name = persons[2][“name”];
    
    4. 数组对象[索引]
    
    5. 遍历
    
    例:比如说我想获取下图王五的年龄
    
    var age = persons.persons[2].age;这样就可以获取到该值了。
    
    
    
    遍历测试:可以达到效果
    
    
    
    数组遍历测试:也可以达到效果:
    
     
   
    
    
    JSON数据和JAVA相互转换
   
    
    
    
     JSON解析器
    
    
    常见的解析器:Jsonlib,Gson,fastjson,jackson
    
    jackson:springmvc内置的json解析器
    
    1.使用步骤:
    
    1.导入jackson的相关jar包
    
    2.创建Jackson核心对象 ObjectMapper
    
    3.调用ObjectMapper的相关方法进行转换
    
    在web下面创建一个WEB-INF模块,然后再创建一个lib模块将jar包放入里面
    
    
    放入jar包以后,还有将jar包加入到模块中,
    
     
   
    1.JAVA转化成为JSON对象
    
    有了json解析器的帮助java对象转换成为json数据就比较快了。
    
    1.先创建一个Person类
    
    2.写一个test类,创建一个Person对象并对其赋值,然后创建Jackson的核心对象,ObjectMapper,并调用其内部转换方法即可。
    
    代码如下:
   
package cn.sainan114.test;
import cn.sainan114.domain.Person;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.File;
import java.io.FileWriter;
/**
 * FileName: Jsontest
 *
 * @Author:luguobao Date: 15:09
 * Description:
 * History:
 * <author>   <time>   <version>   <desc>
 * 作者姓名    修改时间    版本号       描述
 */
public class Jsontest {
    @Test
    public void test(){
        //1.创建Person对象
        Person p = new Person();
        p.setAge(22);
        p.setGender(false);
        p.setName("zhangsan");
        //2.创建Jackson的核心对象ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //转换
        /**
         * 转换方法writeValueAsString(obj):将对象转为json字符串
         * writeValue(参数1,obj)
         * 参数1:File:将obj对象转换为JSON,并保存到指定文件中
         *        Writer:将obj对象转化为JSON字符串,并将json数据填充到字符输出流
         *        OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
         */
        try {
            String json = mapper.writeValueAsString(p);
            //结果如下:{"name":"zhangsan","age":22,"gender":false}
            //System.out.println(json);
            mapper.writeValue(new File("d://a.txt"),p);
            mapper.writeValue(new FileWriter("d://b.txt"),p);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
    结果如下:
    
    
    
    
     注解
    
    
    在java转换json的过程中,可以使用两个注解
    
    1. @JsonIgnore:排除属性。
    
    2. @JsonFormat:属性值得格式化
    
    测试如下:
    
    在类中加入一个实例变量,实现其get,set方法,在上面加入注解
    
    
    
    新建test2(),并进行测试
    
    
    
    结果如下:
    
    
    
    @JsonFormat(pattern = “yyyy-MM-dd”)
    
    pattern代表的是我们期望的样子
    
    
    
    
    
    测试成功。
    
    
     复杂的java对象转换
    
    
    list集合:数组
    
    map集合:和对象结果是一样的
    
    其实对于list来说是一样的:
    
    
    
    其输出结果是一个数组
    
    
    
    用Map键值对
    
    
    
    
     JSON转换为Java对象
    
    
    1. 导入jackson的相关jar包
    
    2. 创建Jackson核心对象 ObjectMapper
    
    3. 调用ObjectMapper的相关方法进行转换
    
    1. readValue(json字符串数据,Class)
    
    代码及结果如下:
    
     
   
 
