81-JSON-JAVACRIPT的对象表示法

# JSON:
    1. 概念: JavaScript Object Notation        用json来表示对象就是JavaScript对象表示法
        Person p = new Person();
        p.setName("张三");
        p.setAge(23);
        p.setGender("男");

    

json就类似到Person对象封装了name age gender这些零散的数据,用对象来当参数来传递这些零散的数据,用到了js中:    var p = {"name":"张三","age":23,"gender":"男"};   

        * json现在多用于存储和交换文本信息的语法
        * 进行数据的传输
        * JSON 比 XML 更小、更快,更易解析。


    
     2. 语法:
        1. 基本规则
            * 数据在名称/值对中json数据是由键值对构成的
                * 用引号(单双都行)引起来,也可以不使用引号
                * 得取值类型:
                    1. 数字(整数或浮点数)
                    2. 字符串(在双引号中)
                    3. 逻辑值(true 或 false)
                    4. 数组(在方括号中)    {"persons":[{},{}]}
                    5. 对象(在花括号中) {"address":{"province":"陕西"....}}
                    6. null

            * 数据由逗号分隔:多个键值对由逗号分隔
            * 花括号保存对象:使用{}定义json 格式
            * 方括号保存数组:[ ]

注意这句话 花括号里保存对象 中括号里保存数组

var persons={"inpersons":[{"name":"张三","gender":true,"age":23},{"name":"tt","gender":true,"age":23},{"name":"yy","gender":true,"age":23}]};
//persons是对象名称   inpersons是键的名称 值对应的是一个数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //1.定义一个基本格式   一个对象
        var person={"name":"张三","gender":true,"age":23}; //大括号
        alert(person);
        //2.嵌套格式 大括号嵌入中括号  多个对象 
嵌套格式 大括号嵌入中括号 其实就是键" " :对应的值是一个数组[{},{}]
        var persons={"inpersons":[{"name":"张三","gender":true,"age":23},{"name":"tt","gender":true,"age":23},{"name":"yy","gender":true,"age":23}]};
//person是对象名称   inpersons是键的名称 值对应的是一个数组
        alert(persons);
        //3.嵌套格式 中括号里面嵌入大括号  一个数组里面放多个对象
        var ps=[{"name":"张三","gender":true,"age":23},{"name":"tt","gender":true,"age":23},{"name":"yy","gender":true,"age":23}]
       alert(ps) ;       
    </script>
</head>
<body>

</body>
</html>

注意这里弹出:
         2. 获取数据:  4种
            1. json对象.键名
            2. json对象["键名"]    -------键名加引号
            3. 数组对象[索引]-------------数组可以用index获取

获取json数据:

 <script>
        //三种方法定义了三个json
        //1.定义一个基本格式
        var person={"name":"张三","gender":true,"age":23}; //大括号
        //获取name的值
        var name = person.name;
        var name01 = person["name"]; //两种获取方式都可以
        alert(name);
        alert(name01);

        //2.嵌套格式 大括号嵌入中括号 其实就是键" " :对应的值是一个数组[{},{}]
        var persons={"inpersons":[{"name":"张三","gender":true,"age":23},{"name":"tt","gender":true,"age":23},{"name":"yy","gender":true,"age":23}]};
       //获取tt 首先考虑persons是一个json对象 里面的inpersons对应的是一个数组有index索引
        var name02 = persons.inpersons[1].name;   //persons是对象名称   inpersons是键的名称 值对应的是一个数组  json对象.数组对象[索引].键名
        alert(name02);


        //3.嵌套格式 中括号里面嵌入大括号  一个数组里面放多个对象
        var ps=[{"name":"张三","gender":true,"age":23},{"name":"tt","gender":true,"age":23},{"name":"yy","gender":true,"age":23}]
        alert(ps[2].name);
    </script>


            4. json遍历

   <script>
        var person={"name":"张三","gender":true,"age":23}; //大括号
        var ps=[{"name":"张三","gender":true,"age":23},{"name":"tt","gender":true,"age":23},{"name":"yy","gender":true,"age":23}];
        var persons={"inpersons":[{"name":"张三","gender":true,"age":23},{"name":"tt","gender":true,"age":23},{"name":"yy","gender":true,"age":23}]};
        //获取person对象种所有的键和值
        //用for in循环
        for (var key in person){
            //alert(key);  //得到的是弹出字符串格式的name gender age
           // alert(key+":"+person.key);  //这里的key是字符串格式所以person.key相当于person."key"形式是不对的
            alert(key+":"+person[key])  ;  //这种方式就是为了遍历使用的  person[key] 因为正常格式是  对象[" "];
        }

        //获取ps中的所有值  ps是一个数组
        for (var i = 0; i <ps.length ; i++) {
            var p = ps[i];
            for (var key in p){

                alert(key+"::"+p[key])  ;
            }
        //获取persons的所有值

                for (var j = 0; j < persons.inpersons.length; j++) {
                    var inperson = persons.inpersons[j];
                    for (var key in inperson) {
                        alert(key+":"+inperson[key])  ;
                }
            }

        }

    </script>


                  

  

 3. JSON数据和Java对象的相互转换   其实json可以转为任意对象 其实java也可以转换为json传递给客户端去使用:

为什么要转换?因为之后要把json当作数据的载体在网咯种进行传输 涉及客户端和服务器端  客户端和服务器端进行通讯时候可以用json作为一个载体

json<==>java

        * JSON解析器: 就是封装好的工具类
            * 常见的解析器:Jsonlib,Gson,fastjson,jackson(Spring内置)
        
    

    1. JSON转为Java对象
            1. 导入jackson的相关jar包
            2. 创建Jackson核心对象 ObjectMapper
            3. 调用ObjectMapper的相关方法进行转换
                1. readValue(json字符串数据,Class)

  @Test//json字符串转为java对象
    public void test05() throws IOException {
        /*  1. 导入jackson的相关jar包
            2. 创建Jackson核心对象 ObjectMapper
            3. 调用ObjectMapper的相关方法进行转换
                1. readValue(json字符串数据,Class)*/
        //1.初始化json字符串
            String json = "{\"name\":\"tt\",\"age\":23,\"gender\":\"男\"}";//json中要写person对象中有的变量
        //2.创建ObjectMapper对象
        ObjectMapper mapper = new ObjectMapper();
        Person person = mapper.readValue(json, Person.class);
        System.out.println(person);  //注意这里是json对象转化为person所以json的键值对要注意怎么写 要写person对象中有的变量  
//输出 cn.itcast.domain.Person@3444d69d  说明json对象已经转为person对象了


    }


        2. Java对象转换JSON   

      ----更为常用一些  在服务器端的数据给客户端去
            1. 使用步骤:
                1. 导入jackson的相关jar包
                2. 创建Jackson核心对象 ObjectMapper
                3. 调用ObjectMapper的相关方法进行转换
                    1. 转换方法:
                        * writeValue(参数1,obj):
                            参数1:
                                File:将obj对象转换为JSON字符串,并保存到指定的文件中
                                Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                                OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中

                        * writeValueAsString(obj):将对象转为json字符串

public class JacksonTest {


    //java对象转为json
    @Test
    public void test01() throws IOException {
        /* 1. 导入jackson的相关jar包
           2. 创建Jackson核心对象 ObjectMapper
           3. 调用ObjectMapper的相关方法进行转换*/
        //1.创建Person对象
        Person p1 = new Person("张三", 23, "男");
        //2.创建json的核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //3.调用转换方法
        /*
          * writeValue(参数1,obj):
                            参数2 obj是一个obj对象
                            参数1:参数一的参数形式有三种writeValue(File,obj);writeValue(Writer,obj);writeValue( OutputStream,obj);
                                File:将obj对象转换为JSON字符串,并保存到指定的文件中
                                Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                                OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
            * writeValueAsString(obj):将对象转为json字符串
         */
        //writeValueAsString(obj):
        String json = mapper.writeValueAsString(p1);
        //期望的打印结果{"name":"张三","age":23,"gender":"男"}
        System.out.println(json);//{"name":"张三","age":23,"gender":"男"}

        //writeValue(参数1,obj):
        mapper.writeValue(new File("D:\\a.txt"),p1);

        mapper.writeValue(new FileWriter("D:\\b.txt"),p1);
        mapper.writeValue(new FileOutputStream("D:\\c.txt"),p1);

    }
}

 

                    2. 注解:
                        1. @JsonIgnore:排除属性。
                        2. @JsonFormat:属性值得格式化
                            * @JsonFormat(pattern = "yyyy-MM-dd")

 @Test
    public void test02() throws JsonProcessingException {

        Person p1 = new Person();
        p1.setName("tt");
        p1.setAge(23);
        p1.setGender("男");

        p1.setBirthday(new Date());
        //2.转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(p1);  //不转换或者忽略的话date输出的是毫秒值{"name":"张三","age":23,"gender":"男","birthday":1652694882457}
        System.out.println(json);
    }

      控制台打印输出:  {"name":"tt","age":23,"gender":"男","birthday":"2022-05-16"}

            3. 复杂java对象转换 list和map的转换
                        1. List:数组
                        2. Map:对象格式一致

  @Test
    public void test03() throws JsonProcessingException {
        Person p2 = new Person();
        p2.setName("tt");
        p2.setAge(23);
        p2.setGender("男");
        p2.setBirthday(new Date());

        Person p3 = new Person();
        p3.setName("uu");
        p3.setAge(20);
        p3.setGender("男");
        p3.setBirthday(new Date());

        Person p4 = new Person();
        p4.setName("yy");
        p4.setAge(23);
        p4.setGender("女");
        p4.setBirthday(new Date());
        //创建list集合
        List<Person> list = new ArrayList<>();
        list.add(p2);
        list.add(p3);
        list.add(p4);
        //转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(list);
        System.out.println(json);
        /*[{"name":"tt","age":23,"gender":"男","birthday":"2022-05-16"},
       {"name":"uu","age":20,"gender":"男","birthday":"2022-05-16"},
        {"name":"yy","age":23,"gender":"女","birthday":"2022-05-16"}]  [{},{},{}] 数组格式*/
    }
    @Test
    public void test04() throws JsonProcessingException {
        HashMap<String,Object> map = new HashMap<>();
        map.put("tt",23);
        map.put("yy",20);
        map.put("gender","男");
        map.put("姓名","tt");
        //转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(map);
        System.out.println(json);//{"tt":23,"yy":20,"姓名":"tt","gender":"男"}注意都是键值对形式的
    }
}


# 案例:
    * 校验用户名是否存在
        1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:
            1. $.get(type):将最后一个参数type指定为"json"
            2. 在服务器端设置MIME类型
                response.setContentType("application/json;charset=utf-8");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值