zoukankan      html  css  js  c++  java
  • Json解析

    javascript中没有一种数据类型叫做"JSON对象".可以说JSON对象是在一种特殊环境上下文中产生的叫法,JSON在日常的表现形式更多的是一个拥有复杂数据结构的字符串, 只是可以被转换为对象,规范里也明确地说了JSON只是一个数据交换语言,只有我们将之用在string上下文的时候它才叫JSON。{ "prop": "val" } 这样的声明有可能是JavaScript对象字面量也有可能是JSON字符串,取决于什么上下文使用它,如果是用在string上下文(用单引号或双引号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。

    
            // 这是JSON字符串
            var foo = '{ "prop": "val" }';
    
            // 这是对象字面量
            var bar = { "prop": "val" };
            console.log(bar.prop);     //val
                 

    而且要注意,JSON有非常严格的语法,在string上下文里{ "prop": "val" } 是个合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }确实不合法的。所有属性名称和它的值都必须用双引号引住,不能使用单引号。另外,即便你用了转义以后的单引号也是不合法的

    如下都是书写错误的

    
            { name: "张三", 'age': 32 }   // 属性名必须使用双引号
            [32, 64, 128, 0xFFF]   // 不能使用十六进制值
            { "name": "张三", age: undefined }    // 不能使用undefined
            { "name": "张三","birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
              "getName": function() {
                  return this.name;
              }
            }   // 不能使用函数和日期对象
                 

    如下规范

    
            var j1 = ["one", "two", "three"];
            var j2 = { "one": 1, "two": 2, "three": 3 };
            var j3 = { "names": ["张三", "李四"] };
            var j4 = [{ "name": "张三" }, { "name": "李四" }];
                 

    注意空数组和空对象都是符合规范的JSON值, null本身也没有问题

    JSON不一定非要是{}或者[],而是两者均可

    新增了JSON对象专门用来处理JSON格式,并且附加了stringify()parse()两个方法.

    
            var j5 = JSON.stringify("abc");
            // "abc"
            var j6 = JSON.stringify({ name: "张三" });
            // {"name":"张三"}
    
            console.log(j5);
                 

    这里转为的时候如果遇到一个值是undefined或者是函数, 那么该值会被省略, 除非这个值是数组的成员, 则返回null.

    var j7 = JSON.stringify({ f: function () { }, a: [function () { }, undefined] }); // "{"a":[null,null]}"

    第一个参数是要转换的对象, 第二个参数可以没有, 也可以是数组参数表示要转化的属性, 或者是一个函数用来更改默认的转换.

    
            var j8 = JSON.stringify({ a: 1, b: 2 }, ['a']);   // "{"a":1}"
    
            var j9 = JSON.stringify({ a: 1, b: 2 }, f)  // "{"a":2,"b":4}"
    
            function f(key, value) {
                if (typeof value === "number") {
                    value = 2 * value;
                }
                return value;
            }
           
                 

    想要将一个字符串转换为JSON对象,那么传入的字符串一定要是有效的格式,否则程序会出错,为了防止意外可以将这个过程放到try/catch代码块中.

            
            function f(key, value) {
                if (key === "") {
                    return value;
                }
    
                if (key === "a") {
                    return value + 10;
                }
    
                if (key === "b") {
                    return value + 10;
                }
    
            }
    
            var o = JSON.parse('{"a":1,"b":2}', f);  
            console.log(o.a);  //2  
                 
    
            var obj = { 
                    name: 'wangkai', 
                    age: 22, address: 'henan', 
                    say: function () { console.log('我的名字是' + this.name); }  
               }; 
    
            obj.say();
                

    缺点是 没法复用,所以更适合用于只一个对象的.层级关系,类似于文件夹,包的形式,命名空间

    
            var kai = {};
            kai.relationship = {
                teacher: {
                    name: 'liulaogen',
                    age: 45,
                    say: function () { console.log('我是你们的老师' + this.name + ',现在开始上课') }
                },
                parents: {
                    phone: '15210000000',
                    docook: function () {
                        console.log('我是' + this.name + ',我来给你做饭')
                    }
                }
            }
            console.log(kai.relationship.teacher.name);
            kai.relationship.parents.docook();
                 
  • 相关阅读:
    Spark Streaming 的容错
    Master 接受其它组件的注册
    Spark Context 概述
    Python 使用random模块生成随机数
    Python 中print 和return 的区别
    Python 访问字典(dictionary)中元素
    PIL:处理图像的好模块
    2.线性回归
    3.梯度下降法
    4.pca与梯度上升法
  • 原文地址:https://www.cnblogs.com/wwkk/p/6762327.html
Copyright © 2011-2022 走看看