多维json编码关联数组php到JS

时间:2013-03-11 23:17:41

标签: php javascript jquery arrays json

嗨,最初我的数组看起来像这样

PHP

$results = array(
    "banana" => $bananavalue,
    "apple" => $applevalue,
);
echo json_encode($results);

JS

var fruits = [];
$.ajax({
  type: "POST",
  url: "actions/MYphp.php",
  data: PassArray,
  dataType: 'json',
  beforeSend: function (html) {
    //    alert(html);
  },
  success: function (html) {
    var obj = html;
    // Now the two will work
    $.each(obj, function (key, value) {
      fruits.push([key, value]);
    });

然而,我想将其改为多维水果和蔬菜,如下所示:

results = array(
    "fruit"=>array(
        "banana" => $bananavalue,
        "apple" => $applevalue
    ),
    "vegetables"=>array(
        "lettuce" => $lettuce,
        "cabbage" => $cabbage
    )
);
echo json_encode($results);

问题是如何在Javascript中循环每个数组并将其分配给两个数组。(水果和蔬菜)

我试过了

$.each(obj['fruit'], function(key, value) {
  fruits.push([key, value]);
});

但那没用。

2 个答案:

答案 0 :(得分:1)

与PHP不同,javascript没有关联数组。

JSON编码的PHP关联数组解码为javascript普通对象。

访问javascript中的数据:

$.ajax({
    type: "POST",
    url: "actions/MYphp.php",
    data: PassArray,
    dataType: 'json',
    success: function(obj) {
        //do whatever is required with obj.fruits and obj.vegetables here
    };
});

通常,您不希望将objobj.fruitsobj.vegetables分配给外部作用域中的成员,因为在ajax响应到达之前它们不可用。您通常会在obj.fruits范围(以及从中调用的函数)中使用obj.vegetablessuccess执行所有必要的操作。

答案 1 :(得分:0)

以类似于PHP,nest 2循环的方式执行此操作。

$.each(obj, function(keyOfOuterArray, innerArray) {
   // keyOfOuterArray equals to vegetables, fruit
   console.log(keyOfOuterArray); 

   $.each(innerArray, function(keyOfInnerArray, valueOfInnerArray) {
     //valueOfInnerArrayis your inner array value
     console.log(keyOfInnerArray, valueOfInnerArray); 
   });
});

回答你的问题:

var myNewObj = {};
$.each(obj, function(keyOfOuterArray, innerArray) {
   $.each(innerArray, function(keyOfInnerArray, valueOfInnerArray) {
      myNewObj[keyOfOuterArray][keyOfInnerArray] = valueOfInnerArray;
   });
});