【问题标题】:Converting PHP JSON data to JavaScript array将 PHP JSON 数据转换为 JavaScript 数组
【发布时间】:2015-10-16 18:22:20
【问题描述】:

我有一个生成的 JSON PHP 数据,我通过 AJAX 请求在 JavaScript 中将其作为对象接收并尝试转换为数组。

例如,我可能有这个(不是真实数据):

Array[1]
    0:Object
        items: Object
            0: "First data item"
            1: "Second data item"
            __proto__: Object
                Some unimportant getter functions
        __proto__: Object
            Some unimportant getter functions
        length: 1
        __proto__: Object
            Some functions
            

我可以将外部部分转换为数组,但如何将内部部分(尤其是items:Object 的字典)也转换为数组?

更新

我的结构变了

Array[1]
    title:#data

【问题讨论】:

  • 在 PHP 中创建一个关联数组,然后使用 json_encode(...); 对数据进行编码并以正确的 javascript 格式返回。
  • 如果 PHP 数据是一个数组,它应该被编码为一个 JSON 数组。如果你在解码时得到一个对象,那么 PHP 数据一定不是一个普通的数组。
  • @War10ck 这似乎与他想要的相反。他得到一个对象,他想要一个数组。
  • 您在 PHP 中使用 json_encode,在 Javascript 中使用 JSON.parse,不是吗?
  • @Barmar 在这种情况下,OP 应该能够创建一个常规数组$out[] = "First data item"; $out[] = "Second data item";,然后使用 json_encode() 返回该数据,就像echo json_encode($out); 一样,对吧? ...

标签: javascript php arrays json


【解决方案1】:

如果您能够修改输出 JSON 的服务器脚本,最好将数据格式化为您想要使用的实际格式。

但是,如果您想将对象的属性值转换为数组,您可以通过在对象上设置length 属性然后在Array.slice 方法上使用.call 来实现。为此,对象属性名称必须是数字(即 0、1、2、3 等),否则不会自动添加到数组中。

var data = [
  { 
    items:{
      0: "Item 1",
      1: "Item 2",
      2: "Item 3",
      3: "Item 4",
    }
  },
  { 
    items:{
      0: "Item 5",
      1: "Item 6",
    }
  }  
];

for(var i=0; i<data.length; i++){
  var items = data[i].items;
  items.length = Object.keys(items).length;
  data[i].items = [].slice.call(items,0);
}
console.log(data);
document.body.innerHTML=JSON.stringify (data);

如果您的对象属性名称不是数字,则必须执行循环并手动将每个值添加到数组中

for(var i=0; i<data.length; i++){
  var items = data[i].items;
  var itemArray = [];
  Object.keys(items).forEach(function(key){
     itemArray.push( items[key] );
  });
  data[i].items = itemArray;
}

【讨论】:

  • 我没有得到任何输出
  • 好的,我已经通过警报确认您放置的循环甚至没有开始 0.0
  • 在 F12 开发者工具控制台 (IE11) 中为我工作:{ [functions]: , proto: { }, items: [ 0: "Item 1", 1 :“第 2 项”,2:“第 3 项”,3:“第 4 项”,长度:4 ] }
  • 啊我想我明白了,key的值也是一个Object,要做成数组。我想我必须颠倒顺序,获取键的对象,然后遍历它们。这行得通吗?
猜你喜欢
  • 2012-12-09
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多