mozilla
您的搜索结果

    JSON.parse()

    概述

    JSON.parse() 方法可以将一个 JSON 字符串解析成为一个 JavaScript 值。在解析过程中,还可以选择性的篡改某些属性的原始解析值。

    语法

    JSON.parse(text[, reviver])

    参数

    text
    要解析的 JSON 字符串,可以查看 JSON 一文了解 JSON 的语法。
    reviver 可选
    一个函数,用来转换解析出的属性值。

    返回值

    text 字符串解析出的一个 JavaScript 值。

    异常

    如果被解析的 JSON 字符串包含语法错误,则会抛出 SyntaxError 异常。

    示例

    例子:使用 JSON.parse()

    JSON.parse('{}');              // {}
    JSON.parse('true');            // true
    JSON.parse('"foo"');           // "foo"
    JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
    JSON.parse('null');            // null
    

    例子:使用 reviver 函数

    如果指定了 reviver 函数,则解析出的 JavaScript 值(解析值)会经过一次转换后才将被最终返回(返回值)。更具体点讲就是:解析值本身以及它所包含的所有属性,会按照一定的顺序(从最最里层的属性开始,一级级往外,最终到达顶层,也就是解析值本身)分别的去调用 reviver 函数,在调用过程中,当前属性所属的对象会作为 this 值,当前属性名和属性值会分别作为第一个和第二个参数传入 reviver 中。如果 reviver 返回 undefined,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值会成为当前属性新的属性值。

    当遍历到最顶层的值(解析值)时,传入 reviver 函数的参数会是空字符串 ""(因为此时已经没有真正的属性)和当前的解析值(有可能已经被修改过了),当前的 this 值会是 {"": 修改过的解析值},在编写 reviver 函数时,要注意到这个特例。

    JSON.parse('{"p": 5}', function (k, v) {
        if(k === '') return v;     // 如果到了最顶层,则直接返回属性值,
        return v * 2;              // 否则将属性值变为原来的 2 倍。
    });                            // { p: 10 }
    
    JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
        console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
                        // 最后一个属性名会是个空字符串。
        return v;       // 返回原始属性值,相当于没有传递 reviver 参数。
    });
    
    // 1
    // 2
    // 4
    // 6
    // 5
    // 3 
    // ""
    

    示例:JSON.parse() 不允许逗号结尾

    // both will throw a SyntaxError
    JSON.parse("[1, 2, 3, 4, ]");
    JSON.parse("{ \"foo\" : 1, }");
    

    规范

    规范名称 规范状态 备注
    ECMAScript 5.1 (ECMA-262)
    JSON.parse
    Standard 首次定义,于 JavaScript 1.7 版本中实现。
    ECMAScript 6 (ECMA-262)
    JSON.parse
    Release Candidate  

    浏览器兼容性

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Basic support (Yes) 3.5 (1.9.1) 8.0 10.5 4.0
    Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Basic support (Yes) (Yes) 1.0 (1.0) (Yes) (Yes) (Yes)

    数据来源 Kangax's compat table

    Gecko 备注

    从 Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) 开始,如果被解析的 JSON 字符串含有语法错误,则该方法抛出的错误信息中将包含错误发生时具体的行列号,这个特性对于调试大型 JSON 数据来说是很有用的。

    JSON.parse('[1, 2, 3,]')
    // SyntaxError: JSON.parse: unexpected character at 
    // line 1 column 10 of the JSON data
    

    相关链接

    文档标签和贡献者

    此页面的贡献者有: ziyunfei, Yaty, yenshen, AlexChao
    最后编辑者: Yaty,