zoukankan      html  css  js  c++  java
  • JSON 入门

    1. 什么是 JSON

    • JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.
    • JSON 是用字符串来表示 JavaScript 对象, 例如可以在 Servlet 中发送一个 JSON 格式的字符串给
      客户端 JavaScript, JavaScript 可以执行这个字符串,得到一个 JavaScript 对象.

    2. JSON 对象语法

    2.1 JSON 语法
    • 数据由逗号分隔;
    • 花括号保存对象;
    • 方括号保存数组;
    • 属性名必须使用双引号括起来, 单引号不行!!
    • 示例: var person = {"name":"zhangsan","age": 18,"sex":"male"};
    2.2 JSON 值
    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true 或 false)
    • 数组(在方括号中)
    • 对象(在花括号中)
    • null
    // 示例
        <html>
            <head>
                <script type="text/javascript">
                    window.onload = function(){
    
                        var str = "{"name":"zhangsan", "age":18, "sex":"male"}";
    
                        // eval: 将字符串当成 javascript 代码来执行
                        // 此处返回的是 {"name":"zhangsan","age":18,"sex":"male"}, 表示 JSON 对象
                        var person = eval("("+str+")");
                        alert(person.name+","+person.age+","+person.sex);
                    }
                </script>
            </head>
            <body>
            </body>
        </html>
    
    # parse(): JS 中用于从一个字符串中解析出json对象; 
    # stringfy(): JS 中用于从一个对象解析出字符串;
    

    3. JSON-lib

    3.1 它是什么?
    • 它可以把 JavaBean 转换成 JSON 串;
    3.2 jar 包
    1. 核心包: json-lib.jar
    2. 依赖包:
      • commons-lang.jar
      • commons-beanutils.jar
      • commons-logging.jar
      • commons-collections.jar
      • ezmorph.jar
      • xom-1.1.jar
    3.3 核心类
    1. JSONObject

      • 父类为 Map
      • toString()
      • JSONObject map = JSONObject.fromObject(person); 把对象转换成 JSONObject 对象;
    2. JSONArray

      • 父类为 List
      • toString()
      • JSONArray jsonArray = JSONArray.fromObject(list); 把 list 转换成 JSONArray 对象;

    4. FastJson

    • 它也可以把 JavaBean 转换成字符串, 由阿里提供;

    常用方法

    • String s = JSON.toJSONString(集合);
    • String s = JSON.toJSONString(对象);
    // 存在问题一: 默认情况下, fastjson 的循环引用
    public void fun(){
        List<Customer> list = new ArrayList<Customer>();
        Customer c = new Customer();
        c.setName("张三");
        c.setAge(20);
    
        // 集合中存在两个相同的 Customer
        list.add(c);
        list.add(c);
    
        // 转换成 json 的字符串
        String jsonString = JSON.toJSONString(list);
        System.out.println(jsonString);
        // 输出结果: [{"name":"张三","age":20},{"$ref":"$[0]"}]
        // 其中,第二个值是引用的第一个值; 如果将该 json 字符串发送到客户端,是无法解析的
    
        // 解决方案: 禁止循环的引用
    String jsonString = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
    System.out.println(jsonString);
    // 输出结果: [{"name":"张三","age":20},{"name":"张三","age":20}]
    }
    
    
    // 存在问题二: 死循环
    
    public class Person{
        private String pname;
        private Role role;
    
        get 和 set 方法
    }
    
    public class Role{
        private String rname;
        private Person person;
    
        get 和 set 方法
    }
    
    public void fun(){
        Person p = new Person();
        p.setPname("张三");
        Role r = new Role();
        r.setRname("管理员");
    
        p.setRole(r);
        r.setPerson(p);
    String jsonString = JSON.toJSONString(p, SerializerFeature.DisableCircularReferenceDetect);
    System.out.println(jsonString);
    // 栈溢出异常;
    }
    
    // 解决方案:
    public class Person{
        private String pname;
    
        // 添加注解, 表示该属性不转换成 json 字符串
        @JSONField(serialize=false)
        private Role role;
    
        get 和 set 方法
    }
    

    参考资料:

  • 相关阅读:
    边框的作用之产生相对margin
    css3 实现切换显示隐藏效果
    Vue 获取数据、事件对象、todolist
    Vue 双向数据绑定、事件介绍以及ref获取dom节点
    Vue 目录结构分析 数据绑定 绑定属性 循环渲染数据 数据渲染
    Vue 安装环境创建项目
    进程&线程
    生成Excel
    JQuery input file 上传图片
    0908期 HTML 样式表属性
  • 原文地址:https://www.cnblogs.com/linkworld/p/7639664.html
Copyright © 2011-2022 走看看