将Javascript对象转换为数组

时间:2014-02-09 13:12:08

标签: javascript jquery arrays json object

好的,所以我正面临着这个挑战......

以下是javascript控制台(在Chrome中)打印我的对象的方式:

enter image description here

以下是我想做的事情:

var items = [
    { 
        text: "http://www.imdb.com/title/tt0106307/",
        children: [
             { text: "Director", children: [ { text: "Emir Kusturica" } ] },
             { text: "Title", children: [ { text: "Arizona Dream" } ] }
        ]
    },
    { 
        text: "http://www.imdb.com/title/tt0110074/",
        children: [
             { text: "Director", children: [ { text: "Joel Coen" }, { text: "Ethan Coen"} ] },
             { text: "Title", children: [ { text:"The Hudsucker Proxy" } ] }
        ]
    }
    // and so on..
];

我该怎么做?有什么想法/指示可以帮助我实现目标吗?

它绝对应该相当简单,但Javascript绝对不是不是我的东西......


PS 这整个对象是在$.parseJSON(myJson)命令之后创建的 - 现在,不要问我为什么它没有转换为简单的嵌套数组而是变成了一个对象。 ..我希望我知道...... (并不是说它有所需的结构,但至少它会更有意义)


更新

好的,以及 - 如果它有用 - 这是我原来的Json:

{
    "http:\/\/www.imdb.com\/title\/tt0106307\/": {
        "Title": "Arizona Dream",
        "Year": null,
        "Director": "Emir Kusturica"
    },
    "http:\/\/www.imdb.com\/title\/tt0112883\/?ref_=tt_rec_tt": {
        "Title": "Don Juan de Marco",
        "Year": null,
        "Director": "Jeremy Leven"
    },
    "http:\/\/www.imdb.com\/title\/tt0106387\/?ref_=tt_rec_tt": {
        "Title": "Benny & Joon",
        "Year": null,
        "Director": "Jeremiah S. Chechik"
    },
    "http:\/\/www.imdb.com\/title\/tt0099487\/?ref_=tt_rec_tt": {
        "Title": "\u039f \u03a8\u03b1\u03bb\u03b9\u03b4\u03bf\u03c7\u03ad\u03c1\u03b7\u03c2",
        "Year": null,
        "Director": "Tim Burton"
    },
    "http:\/\/www.imdb.com\/title\/tt0354899\/?ref_=tt_rec_tt": {
        "Title": "La science des r\u00eaves",
        "Year": null,
        "Director": "Michel Gondry"
    },
    "http:\/\/www.imdb.com\/title\/tt0110074\/?ref_=tt_rec_tt": {
        "Title": "The Hudsucker Proxy",
        "Year": null,
        "Director": [
            "Joel Coen",
            "Ethan Coen"
        ]
    }
}

P.S。 (2)我实际上要做的是简单地使用jsTree将Json对象表示为树,并推动自己实现其所需的结构。

5 个答案:

答案 0 :(得分:1)

在ES5中(如果支持IE 8则需要垫片):

function transformToTextNodeTree(obj) {
  return Object.keys(obj).map(function(key) {
    var result = { text: key };
    if (Array.isArray(obj[key]) {
        result.children = obj[key].map(transformToTextNodeTree);
    } else if (typeof obj[key] === "object" && !(obj[key] == null)) {
      result.children = transformToTextNodeTree(obj[key]);
    } else {
      result.children = [createTextNode(obj[key])];
    }
    return result;
  })
}

function createTextNode(val) {
  return { text: val };
}

那它在做什么?

首先,我们使用ownProperties创建一个包含所传入对象的Object.keys的数组。然后,我们map生成key值的结果数组,并将其转换为{text, [...children]}形式的对象。

我们的映射函数的实际内容是递归函数(它在遇到数组或对象时调用自身),它将键映射到结果对象的text字段,并将任何子映射到children字段(如前所述,它以递归方式执行此操作)。

答案 1 :(得分:0)

我可能错了,但我相信json是内置于javascript中的。你应该可以说:

var object = eval("<jsoncode>");

其中&lt; jsoncode&GT;是你的json的字符串版本

我可能会错误地阅读您的问题所以请提供反馈

答案 2 :(得分:0)

解析JSON后,您可以尝试:

var movieArr = [];
$.each(data, function(index, value) {
    var movie = {
        text: index,
        children: [
            { text: "Director", children: [ { text: value.Director } ] },
            { text: "Title", children: [ { text: value.Title } ] }
        ]
    };   
    arr.push(movie)
});

答案 3 :(得分:0)

试试这个:

// json - source JSON;
var result = [];
for (var url in json) {
    var el = json[url];
    var kids = [];
    for (var prop in el) {
        var v = el[prop];
        if (!v.length) v = [v];
        var subkids = [];
        for (var i in v) subkids.push({text: v[i]});
        kids.push({text: prop, children: subkids});
    }
    result.push({text: url, children: kids});
}

答案 4 :(得分:0)

好的,这就是我设法做到的方式 - 灵感来自你的答案: - )

function convertJson(node)
{
    var result = [];
    $.each(node, function(key,value)
        {   
            var ch;

            if (($.type(value)!=="string")&&(value!=null)) ch = convertJson(value);
            else ch = [ { text: value }];

            var item =
            {
                text: key,
                children: ch

            };
            result.push(item);
        }
    )

    return result;
}

是的,它有效!

相关问题