【问题标题】:JSON.parse reviver function has n+1 keys?JSON.parse reviver 函数有 n+1 个键?
【发布时间】:2012-12-27 00:17:29
【问题描述】:

我想在解析 JSON 字符串时 test the code overload which can provide 一个 reviver 函数。

所以这段代码:

JSON.parse('{"p": 5}', function(k, v) { if (k === "") return v; return v * 2; }).p;

产生10(好的)。

但后来我问自己,“if (k === "") 是什么东西?”让我们删除它!:

JSON.parse('{"p": 5}', function(k, v) { return v*2;}).p; //undefined !!

也许是因为 5 是整数?让我们试试parseInt

JSON.parse('{"p": 5}', function(k, v) { return parseInt(v)*2;}).p; //undefined !!

很奇怪……

那么我想看看是哪些键(虽然这里只有一个)造成了麻烦:

JSON.parse('{"p": 5}', function(k, v) { alert(v)}).p;

有 2 个警报:

  • 5

  • [object Object]

恕我直言,kv 用于 keyvalue,实际上这里只有一个键。

什么这是另一个警报? 为什么我必须检查if (k === "")

【问题讨论】:

    标签: javascript json parsing reviver-function


    【解决方案1】:

    答案在您提供的链接中...

    最终使用空字符串和最高值调用 reviver 以允许转换最高值。

    vk === ""情况下的对象本身

    【讨论】:

    • 我想我应该检查一下。
    • v 是内部对象还是外部整个对象?
    • 哪个内部对象?有一个带有键 p 的对象。打开控制台(在 Chrome 中是 ctrl+i,在 Firefox 中是 ctrl+shift+k)并粘贴 JSON.parse('{"p": 5}', function(k, v) { console.log(v); return v; });
    • 这就是{"p": {"a":2}} 的全部内容。还应该是什么?
    • JSON.parse('{"p": {"a":2}}', function(k, v) { if (k === "") alert(v.p.a); return v * 2; }); 警报未定义。不是应该返回 2 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2017-05-03
    • 2015-04-22
    • 2016-11-18
    • 2012-05-22
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多