好的,所以我正面临着这个挑战......
以下是javascript控制台(在Chrome中)打印我的对象的方式:
以下是我想做的事情:
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对象表示为树,并推动自己实现其所需的结构。
答案 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;
}
是的,它有效!