格式化json数组的问题

时间:2014-02-21 09:28:42

标签: javascript jquery json

作为来自服务器的响应我得到:

{"vorname":["muss ausgefüllt werden"],"name":["muss ausgefüllt werden"]}

所以我对这个Json数组xhr.responseText做的是:

   $.each(jQuery.parseJSON(xhr.responseText), function( i, val ) {
            console.log(val[0]);
     });

通常我会期望这个输出:

 vorname    
 name

但我明白了:

 muss ausgefüllt werden
 muss ausgefüllt werden

为什么呢?我该如何解决?感谢

5 个答案:

答案 0 :(得分:2)

如果您想获得key财产的名称。我建议你使用简单的for-in loop

for (var item in jQuery.parseJSON(xhr.responseText)) {
    console.log(item )
}

修改

目前,您正在打印value,因为您需要获取key属性的名称。所以你应该打印key每个回调的第一个参数。所以你可以使用。

$.each(data, function(key, val ) {
   console.log(key);
});

DEMO with JSON data including both for-in and $.each

答案 1 :(得分:1)

  

为什么呢?我该如何解决?

jQuery.parseJSON(xhr.responseText)的结果是对象$.each将属性的名称作为第一个参数传递,其作为回调的第二个参数。

似乎您要记录名称,因此您必须记录i,而不是val的值:

$.each(jQuery.parseJSON(xhr.responseText), function( i, val ) {
   console.log(i);
});

documentation中的示例是非常不言自明的IMO:

  

如果一个对象被用作集合,则回调传递a   每次键值对:

var obj = {
    "flammable": "inflammable",
    "duh": "no duh"
};
$.each( obj, function( key, value ) {
    alert( key + ": " + value );
});
     

再一次,这会产生两条消息:

flammable: inflammable
duh: no duh

答案 2 :(得分:1)

试试这个:

$.each(jQuery.parseJSON(xhr.responseText), function (key, val) {
    console.log(key);
});

根据key的文档,您必须返回 json对象$.each()

如果对象用作集合(在您的情况下也是 ),则每次都会向回调传递一个键值对。

var obj = {
   "flammable": "inflammable",
   "duh": "no duh"
};
$.each( obj, function( key, value ) { // key returns key of json object.
   alert( key + ": " + value ); //    alert(flammable: inflammable);
});                             //----------^^key^^----^^-value-^^--

这两次提醒

flammable: inflammable // alert(flammable: inflammable);
duh : no duh                //--^^key^^----^^-value-^^--

警报中:之前的项目是json对象中的键,其他是相应的值。

答案 3 :(得分:1)

试试这个:

var obj = jQuery.parseJSON(yourResponse)
for (var key in obj){
  console.log(key + ':' + obj[key])  
}

回复:

vorname:mussausgefülltwerden 姓名:mussausgefülltwerden

答案 4 :(得分:0)

因为您正在打印VAL而不是KEY。 有你期望的:

 $.each(jQuery.parseJSON(xhr.responseText), function( key , val ) {
       console.log(key);
 });

Here a demo

<强>说明: 如果你看一下JQuery API

“[..] $ .each()函数可用于迭代任何集合,无论是对象还是数组[...]该方法返回其第一个参数,即迭代的对象。 。]“