使用 jQuery 访问多维 JSON 数组中的数据

Posted

技术标签:

【中文标题】使用 jQuery 访问多维 JSON 数组中的数据【英文标题】:Accessing data in a multidimensional JSON array with jQuery 【发布时间】:2011-08-02 19:33:57 【问题描述】:

我正在尝试研究如何访问本质上是多维 JSON 数组中的数据。

我的 jQuery AJAX 请求如下所示:

 $("#login-form").submit(function(e) 
 e.preventDefault();
 $.ajax(
   type: 'POST',
   url: '/ajax/login',
   data: 'email='+$("#email").val()+'&password='+$("#password").val(),
   success: function(data)

     // FIRE ALERT HERE        
     alert(data.firstname);

     ,
     dataType: 'json'
  );
);

这就是我要回来的。用户帐户详细信息,以及他们帐户中的产品列表。


    "logged_in":true,
    "firstname":"Joe",
    "surname":"Bloggs",
    "Full_name":"Joe Bloggs",
    "email":"email@website.com",
    "phone":"+123456789",
    "website":"",
    "age":"26-35",
    "street":"1 Street Ave",
    "city":"Townland",
    "state":"NA",
    "postcode":"1234",
    "country":"Australia",
    "products":2,
    "0":
        "product_no":"1087",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    ,
    "1":
        "product_no":"24",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    

如您所见,我正在提醒名字,这很好。我可以使用 data.key 访问第一个维度中的所有内容,但我不确定我需要如何索引下一个维度。显然我想以某种方式展示每个产品。

欢迎提出建议。

【问题讨论】:

如果您使用 php 那么json_encode 是您数据的最佳解决方案 【参考方案1】:

每个产品详情都可以通过data[iProductIndex.toString()]会员访问。数据存储在data["0"]data["1"] 中,因此要访问它们,您需要将整数值转换为字符串。不幸的是,您将无法使用$.each 循环,因为“0”和“1”是单独的成员对象。使用 iProductIndex 的 for 循环。

【讨论】:

有机会举个小例子吗?我对 jquery 比较陌生。【参考方案2】:

在您的成功函数中,您可以将 JSON 数据视为 javascript 对象。您可以像这样访问产品数组和其中的对象:

console.log(data.products + " product(s) in data"); // data.products is 2 (integer)
for(var i = 0; i < data.products; i++)             // 
    var product = data[i.toString()];               // 0.toString() is "0"
                                                    // data["0"] is what you want
                                                    // now product points to the property "0"
    console.log(product.product_no);                // so you can use product.xxx
                                                    // or product["xxx"]
                                                   // likewise for "1", "2", "3" and so on

如果您不知道控制台是什么,请将 console.log 替换为 alert

【讨论】:

data.products.length 返回undefined 因为“0”和“1”不是products的子代 这正是我想要的。感谢您为我指明正确的方向【参考方案3】:

提供的数据不允许您回答,Salman A。请参阅 JSON Arrays 了解数组定义,让它按照您的方式工作,它必须被定义为

"products" : [ "product_no":"1087",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1" ] 

致 OP: 警报(数据[“0”].product_no); 警报(数据[“1”][“购买日期”]);

【讨论】:

【参考方案4】:

试试这个

<script type="text/javascript">
var json_string=
    "logged_in":true,
    "firstname":"Joe",
    "surname":"Bloggs",
    "Full_name":"Joe Bloggs",
    "email":"email@website.com",
    "phone":"+123456789",
    "website":"",
    "age":"26-35",
    "street":"1 Street Ave",
    "city":"Townland",
    "state":"NA",
    "postcode":"1234",
    "country":"Australia",
    "products":2,
    "0":
        "product_no":"1087",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    ,
    "1":
        "product_no":"24",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    
;

for (key in json_string) 
// Most modern browsers should have hasOwnProperty by now.
// This keeps us from getting farther up the chain.
if (json_string.hasOwnProperty(key)) 
document.write(key + "->" + json_string[key]);
document.write("<br>");

; 


var pro_1= json_string[0]; // here u change 0 with 1 and get the data of "1"

for (key in pro_1) 
if (pro_1.hasOwnProperty(key)) 
document.write(key + "->" + pro_1[key]);
document.write("<br>");

; 

</script>

【讨论】:

以上是关于使用 jQuery 访问多维 JSON 数组中的数据的主要内容,如果未能解决你的问题,请参考以下文章

Ajax以JSON访问从PHP返回的多维数组

jQuery解析JSON多维数组

PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?

Json C# 多维数组访问

如何在 javascript 中访问多维 PHP 数组作为 json 编码的变体?

PHP json多维数组追加数组怎么写?