Json笔记

Json

1、概念

  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式
  • 它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,
  • 采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率

2、语法

1、基本规则

  • 数据:json数据是由键值对构成
  • 键:用引号(单双都行)引起来,也可以不使用引号
  • 值:
    • 数字:整数或浮点数
    • 字符串:在双引号中
    • 逻辑值:true/false
    • 数组:[]在方括号中
    • 对象:{}在花括号中
    • null:
  • 数据有逗号分割:多个键值对由逗号分割
  • 花括号保存对象:使用{}定义json格式
  • 方括号保存数组:[]

定义json的三种方式

 //1、定义基本格式
 var person = {"name":"张三",age:23,'gender':true};
//2、嵌套:{[]}
        var persons = {
            "person":[
                {"name":"张三",age:23,'gender':true},
                {"name":"张三",age:23,'gender':true},
                {"name":"张三",age:23,'gender':true}
            ]
        };
//3、嵌套:[{}]
        var ps = [
            {"name":"张三",age:23,'gender':true},
            {"name":"张三",age:23,'gender':true},
            {"name":"张三",age:23,'gender':true}
        ];

2、获取数据

1、json对象.键名

 var person = {"name":"张三",age:23,'gender':true};
var name = person.name;
var names = person["name"];

2、json对象[“键名”]

 var person = {"name":"张三",age:23,'gender':true};
var names = person["name"];

3、数组对象[索引]

var persons = {
            "person":[
                {"name":"张三",age:23,'gender':true},
                {"name":"张三",age:23,'gender':true},
                {"name":"张三",age:23,'gender':true}
            ]
        };
        var age = persons.person[2].age;
var ps = [
            {"name":"张三",age:23,'gender':true},
            {"name":"张三",age:23,'gender':true},
            {"name":"张三",age:23,'gender':true}
        ];
        var gender = ps[0].gender;

3、遍历获取

 <script>
        //1、定义基本格式
        var person = {"name":"张三",age:23,'gender':true};

         for(var key in person){
             alert(key+":"+person[key]);
         }
        //嵌套:{[]}
        var persons = {
            "person":[
                {"name":"张三",age:23,'gender':true},
                {"name":"张4",age:56,'gender':false},
                {"name":"张5",age:73,'gender':true}
            ]
        };
        for (var m=0;m<persons.person.length;i++){
            var n = persons.person[m];
            for(var key in n){
                alert(key+":"+n[key]);
            }
        }

        //嵌套:[{}]
        var ps = [
            {"name":"张三",age:23,'gender':true},
            {"name":"张6",age:93,'gender':true},
            {"name":"张8",age:20,'gender':false}
        ];       
         for(var i=0;i<ps.length;i++){
             var p = ps[i];
             for (var key in p){
                 alert(key+":"+p[key]);
            }
         }
</script>

3、json与java对象的相互转化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pi8e6aMh-1624092258621)(Json.assets/image-20210618230227989.png)]

json解析器:

  • Jsonlib
  • Gson
  • fastjson
  • jackson

1、Json转为Java对象

1、导入Jackson的相关的jar包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WonCZV0-1624092258623)(Json.assets/image-20210619103516183.png)]

2、创建Jackson核心对象ObjectMapper

 ObjectMapper mapper = new ObjectMapper();

3、调用ObjectMapp的相关方法进行转换

readValue(json字符串,Class)
@Test
    public void testJsonToJava() throws IOException {
       //1、创建一个json字符串
        String json = " {\"name\":\"yangyang\",\"age\":18,\"gender\":\"女\",\"birthday\":\"2021-06-19\"}";
        //2、创建一个Jack核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //调用readValue();转换
        User user = mapper.readValue(json, User.class);
        System.out.println(user);//User{name='yangyang', age=18, gender='女'}
    }

2、Java对象转Json

1、使用步骤

1、导入Jackson的相关的jar包

和json转java对象的jar一样

2、创建Jackson核心对象ObjectMapper

 ObjectMapper mapper = new ObjectMapper();

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AlbPOr7p-1624092258624)(Json.assets/image-20210619095859653.png)]

writeValue(参数1,obj);
      参数1
            File:将obj对象转为JSON字符串,并保存到指定的文件中
            writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
            OutputStream:将obj对象转化为JSON字符串,并将数据填充到字节输出流中
mapper.writeValueAsString(obj):将java对象转为json字符串        

代码

/**
 * java转Json
 */

public class JavaToJson {
    @Test
    public void testJavaToJson() throws IOException {
--------------------------------//1、创建User对象------------------------------
        User user = new User();//User是一个javaBean对象
        user.setName("yangyang");
        user.setAge(18);
        user.setGender("女");
----------------------//2、创建Jack的核心对象 ObjectMapper----------------------
        ObjectMapper mapper = new ObjectMapper();
--------------------------------//3、转化--------------------------------------
        /**
         *writeValue(参数,obj);
         * 参数1
         *     File:将obj对象转为JSON字符串,并保存到指定的文件中
         *     writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
         *     OutputStream:将obj对象转化为JSON字符串,并将数据填充到字节输出流中
         * mapper.writeValueAsString(obj):将java对象转为json字符串
         */
    --------------------------方式一--------------------------
        String json = mapper.writeValueAsString(user);
        //{"name":"yangyang","age":18,"gender":"女"}
        System.out.println(json);

	-----------------------方式二----------------------------
        //writeValue();将数据写到a.txt文件中
        mapper.writeValue(new File("E://a.txt"),user);
	-----------------------方式三----------------------------
        //writeValue,将数据关联到writer中
        mapper.writeValue(new File("E://b.txt"),user);
    }
}

效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQsm87v8-1624092258626)(Json.assets/image-20210619102848975.png)]

2、注解:
  • birthday什么注解也不加
 	//{"name":"yangyang","age":18,"gender":"女","birthday":1624072760458}
	private Date birthday;
  • @JsonIgnore:排除属性
    //{"name":"yangyang","age":18,"gender":"女"}
	@JsonIgnore//忽略该属性
    private Date birthday;
  • JsonFormat:属性值得格式化
    //{"name":"yangyang","age":18,"gender":"女","birthday":"2021-06-19"}
	@JsonFormat(pattern = "yyyy-MM-dd")//格式化
    private Date birthday;
3、复杂的java对象转换
  • List集合--------->数组格式
/**
     * list集合------->json
     * @throws IOException
     */
    @Test
    public void testJavaToJson3() throws IOException {
        //1、创建User对象
        User user = new User();
        user.setName("yangyang");
        user.setAge(13);
        user.setGender("女");
        user.setBirthday(new Date());
        User user2 = new User();
        user2.setName("xoxo");
        user2.setAge(16);
        user2.setGender("女");
        user2.setBirthday(new Date());
        User user3 = new User();
        user3.setName("xixi");
        user3.setAge(18);
        user3.setGender("女");
        user3.setBirthday(new Date());
        //创建List对象
        List<User> list = new ArrayList<User>();
        list.add(user);
        list.add(user2);
        list.add(user3);
        //2、创建Jack的核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //3、转换
        /**
         * [
         *      {"name":"yangyang","age":18,"gender":"女","birthday":"2021-06-19"},
         *      {"name":"yangyang","age":18,"gender":"女","birthday":"2021-06-19"},
         *      {"name":"yangyang","age":18,"gender":"女","birthday":"2021-06-19"}
         * ]
         */
        String json = mapper.writeValueAsString(list);

        System.out.println(json);
    }
  • Map集合-------->对象格式
/**
     * Map集合---------->json
     * @throws IOException
     */
    @Test
    public void testJavaToJson4() throws IOException {
        //创建Map集合
        Map<String, Object> map = new HashMap<>();
        map.put("name","yangyang");
        map.put("age",28);
        map.put("gender","女");
        map.put("birthday",new Date());
        //2、创建Jack的核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //3、转换
        //{"birthday":1624075834853,"gender":"女","name":"yangyang","age":28}
        String json = mapper.writeValueAsString(map);
        System.out.println(json);
    }
4、用户名校验

注意:在服务器响应的数据,在客户端使用时,要想当作json数据使用由两种方法

  • $.get(type):将最后一个参数type指定为”json“
    
  • //在服务器端设置MIME类型:json
    resp.setContentType("application/json;charset=utf-8");  
    

    客户端代码

    <script>
            $(function () {
                //给name绑定blur(失去焦点)事件
                $("#username").blur(function () {//鼠标失去焦点
                    //获取文本框的输入的值
                    var username = $(this).val();
                    //发送异步请求
                    $.get(
                        "findUserServlet",
                        {username:username},
                        function (data) {
                            //期望服务器响应回的数据格式:
                            //{"userExsit":true,"msg":"用户名太受欢迎,请更换!!!"}
                            //{"userExsit":false,"msg":"用户名可用"};
                            var span = $("#s_username");
                            if(data.userExsit){
                                //用户名 存在
                                span.css("color","red");
                                span.html(data.msg);
                            }else {
                                //用户名不存在
                                span.css("color","green");
                                span.html(data.msg);
                            }
                        }//,
                        //"json"
                    );
                });
            });
        </script>
    </head>
    <body>
        <form>
            <input type="text" id="username" name="username"><br>
            <span id="s_username"></span><br>
            <input type="password" id="pass" name="password"><br>
            <input type="submit" value="注册"><br>
        </form>
    </body>
    

    服务器端代码

    @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置响应格式为json
            resp.setContentType("application/json;charset=utf-8");
            Map<String, Object> map = new HashMap<>();
    
            //获取用户名
            String username = req.getParameter("username");
            //期望服务器响应回的数据格式:
            //{"userExsit":true,"msg":"用户名太受欢迎,请更换!!!"}
            //{"userExsit":false,"msg":"用户名可用"};
            if(username.equals("yangyang")){
                map.put("userExsit",true);
                map.put("msg","此用户太受欢迎,请更换一个");
            }else{
                map.put("userExsit",false);
                map.put("msg","用户名可用");
            }
            //将map集合转为json
            ObjectMapper mapper = new ObjectMapper();
            mapper.writeValue( resp.getWriter(),map);
        }
    

在这里插入图片描述
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值