Javascript对象到数组

时间:2011-06-02 13:28:04

标签: javascript json

我在转换一些JSON方面遇到了一些问题,而且我得到了一些帮助。这是我的问题,我有JSON返回以下内容:

收到的JSON示例(来自CSV文件):

[
    {
        "rating": "0",
        "title": "The Killing Kind",
        "author": "John Connolly",
        "type": "Book",
        "asin": "0340771224",
        "tags": "",
        "review": "i still haven't had time to read this one..."
    },
    {
        "rating": "0",
        "title": "The Third Secret",
        "author": "Steve Berry",
        "type": "Book",
        "asin": "0340899263",
        "tags": "",
        "review": "need to find time to read this book"
    },

    cut for brevity   

]

现在,这是一个对象的一维数组,但我有一个函数,我需要将它传递给它只需要一个多维数组。我无法改变这一点。我一直在网上寻找转换,并遇到了这段代码:

if (! obj.length) { return [];} // length must be set on the object, or it is not iterable  
   var a = [];  

   try {  
       a = Array.prototype.slice.call(obj, n);  
   }  
   // IE 6 and posssibly other browsers will throw an exception, so catch it and use brute force  
   catch(e) {  
       Core.batch(obj, function(o, i) {  
           if (n <= i) {  
               a[i - n] = o;  
           }  
       });  
   }  

   return a;  

但我的代码一直停留在“无对象长度”部分。当我遍历每个对象时,我逐个字符地获得。不幸的是,那些字段名称(评级,标题,作者)等不是一成不变的,我无法使用obj.Field表示法访问任何内容。

我坚持这个;有没有办法将这些对象转换为数组,还是我必须回到开头并转储JSON?

4 个答案:

答案 0 :(得分:4)

如果我理解正确,有两件事你需要知道才能实现这一目标。

其中一个原因是object.member也可以写为object["member"]。这意味着您不必将属性名称硬编码到对象到数组转换器中,但可以将它们视为字符串。

第二个是for-in语句(参见section 12.6.4)。对于一个对象,它遍历其所有成员。

以下将导致innerArray是一个包含对象所有成员的所有值的数组

var innerArray = [];
for (property in object) {
    innerArray.push(object[property]);
}

使用这些知识,您可以定制数组以包含从json对象中提取所需的任何信息。

答案 1 :(得分:4)

有一个很好的JavaScript库叫做Undersore.js,可以进行各种对象/数组操作。

使用它可以像这样轻松地进行转换

_(json).each(function(elem, key){
    json[key] = _(elem).values();
});

答案 2 :(得分:0)

这将输出:

var newJSON = [];

for (var i = 0, len = json.length; i < len; i++)
{
    newJSON.push([json[i]]);
}

INTO ...

[
 [Object { rating="0", title="The Killing Kind", more...}],
 [Object { rating="0", title="The Third Secret", more...}]
]

小提琴: http://jsfiddle.net/Ta6hW/

答案 3 :(得分:0)

有一种简单的方法可以做到这一点

使用一维对象:

var myarrayfromobject = new Array();
$H(myobject).each(function(item, i){
    myarrayfromobject[i] = item;
});

如果你有一个多维对象,你可以使用相同的想法,使用递归函数或循环,验证项目的类型。