javascript - JSON 字符串中出现意外的空键值

标签 javascript jquery json

我正在尝试解析嵌入在我的 html 文件中的 json 字符串。 这是简化的代码。

<html>
<head>
<script src="./jquery-1.4.4.min.js" type="text/javascript"></script>
<script>
  function parse_json(){
    var jtext = $("#mtxt").text();
    var jdata = jQuery.parseJSON(jtext);
    JSON.parse(JSON.stringify(jdata), function (key, value){ 
            alert("key=" + key + " value=" + value);
            if(key== ""){
                    alert("value in string" + JSON.stringify(value));              
            }
    });
  }
  $(document).ready(function() {
    $("#run").click( function () {
        parse_json();
    }); 
  });
</script>
</head>

<body>
<a id="run" href="#">run</a>
<div id="mtxt">
{"caller": "539293493"}
</div>
</body>
</html>

当我解析它时,除了预期的“调用者”值之外,我还得到一个额外的空“键”和“值”。 第一个警报给了我

key= value=[object Object]

第二个警报给了我

value in string{}

发生了什么事?为什么要添加这个额外条目?

最佳答案

好的,您将第二个参数传递给 JSON.parse(),这是 reviver 回调。每the JSON docs ,此回调执行“...对于最终结果的每个级别的每个键和值。每个值将被 reviver 函数的结果替换。这可用于将通用对象重组为伪类的实例,或者将日期字符串转换为 Date 对象。"

由于您的 reviver 回调不返回任何内容,因此您的对象被不当操作和扭曲。我不相信您在这里使用reviver有任何用处。我从未见过它在任何地方使用过,而且我经常使用 JSON.parse

您的代码应如下所示:

function parse_json()
{
    var jtext = $("#mtxt").text(),
        jdata = JSON.parse( $.trim( jtext ) ),
        key,
        value;

    for( key in jdata )
    {
        if( Object.prototype.hasOwnProperty.call( jdata, key ) )
        {
            value = jdata[key];
            //prefer console.log here...
            alert( 'key: ' + key + ', value: ' + value)
        }
    }
}

$( function()
{
    $( '#run' ).click( function()
    {
        parse_json();
    } ); 
} );

演示: http://jsfiddle.net/hjVqf/

关于javascript - JSON 字符串中出现意外的空键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533227/

相关文章:

javascript - 为网络应用程序存储长格式文本

javascript - JSON 中的过滤和附加?

javascript - 提前从 jquery 类型中获取值

javascript - 使用 jquery .find() 获取子项

Jquery .css() 函数问题与 unicode 字符

javascript - 在来自 javascript/jquery 的选择选项值中设置双引号字符串,也可以从 javascript/jquery 获取

javascript - : up, 键盘点击事件 下、左、右

javascript - javascript中的点运算符

Javascript onmouseup 事件未按预期触发

javascript - JavaScript 中更高效的选项对象