我正在尝试解析嵌入在我的 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();
} );
} );
关于javascript - JSON 字符串中出现意外的空键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533227/