如何在jquery中打印json数组

时间:2012-12-22 05:00:14

标签: javascript jquery json

以下是我的json回复:

{"fname":"abc","lname":"xyz","email":"test@user.com","description":[{"city":"abcxyz","address":"AX","country":"US","date":"2020-02-01"},{"city":"abcxyz","address":"AX","country":"US","date":"2020-02 01"}], "city":"abcxyz","address":"DS","country":"US","Month":"12","Year":"2012"}

以下是我的代码:

success: function(data)
{                             
       var userinfo=eval(data);         
       alert(userinfo['fname1']; //display correct result
       alert(userinfo['description']['city']; //display undefined

       if(!$("#fname1").val())  $("#fname1").val(userinfo['fname']);
       if(!$("#lname1").val())  $("#lname1").val(userinfo['lname']);                                                     
}

成功功能如果我正在尝试提醒alert(userinfo['fname1'],那么它会向我显示正确的结果,即显示名称,但如果我尝试提醒alert(userinfo['description']['city'],那么它会在警报中显示undefined

然后我尝试使用each循环,但仍然无效

$.each(userinfo['description'], function() {
alert(userinfo'description']['city']; //not working
$("#city option[value="+userinfo['description']['city']+"]").attr("selected", "selected");
});   

以下是我的HTML:

<select name="country" id="country">
        <?php
          foreach ($this->description as $country) {
        ?>
        <option value="<?php echo $country['country']; ?>" <?php echo ($this->params['country'] == $country['country']) ? "selected='selected'" : ""; ?>><?php echo $country['country']; ?></option>
         <?php }
         ?>
</select>

任何人都可以告诉我我错的地方。感谢。

4 个答案:

答案 0 :(得分:3)

你需要这样做:

  

警报(用户信息[ '描述'] [0] [ '城市'];

userinfo['description']是一个数组。您需要首先引用元素索引。引用该对象后,请参阅属性

我认为不需要eval。 Eval是一种不好的做法。您可以这样写:

  

var userinfo = data;

如果服务器发送了正确的标头(application/json),或者您已通过json dataType参数,则JQuery会解析响应。即使dataType的默认值为intelligent guess

答案 1 :(得分:1)

你的第二种方法是正确的,你应该遍历userinfo['description'],因为它是一个数组。但是,您应该访问迭代的当前元素:

$.each(userinfo['description'], function() {
    alert(this['city'];
    $("#city option[value="+this['city']+"]").attr("selected", "selected");
});

您可以使用this或显式第二个参数来获取当前元素(第一个参数是数组中的索引)。查看jQuery.each的文档以获取更多信息。

BTW我第二次@closure,使用eval是不安全的。当需要解析json格式的字符串时,请使用$.parseJSON代替(或JSON.parse,如果您的环境支持它)。在这种情况下,它是不必要的,因为success回调已经对你做了。

答案 2 :(得分:0)

您需要使用数组索引访问的数组中的描述:

userinfo["description"]["0"]["city"]

答案 3 :(得分:0)