假设我正在处理这样的 JSON:
http://hndroidapi.appspot.com/nestedcomments/format/json/id/4620423?appid=hntoolbar&callback=
可以无限嵌套。我想以“扁平化”格式提取所有评论信息,只是用户名列表及其评论内容,而不用担心评论的“级别”。我将如何使用 Javascript/JQuery 做类似的事情?
假设我正在处理这样的 JSON:
http://hndroidapi.appspot.com/nestedcomments/format/json/id/4620423?appid=hntoolbar&callback=
可以无限嵌套。我想以“扁平化”格式提取所有评论信息,只是用户名列表及其评论内容,而不用担心评论的“级别”。我将如何使用 Javascript/JQuery 做类似的事情?
use recursion:
var getall = function(comments,out) {
var out = out || {};
var cuser = undefined;
var comment;
for (var key in comments) {
if (key == 'username') {
cuser = comments[key];
continue;
}
if (key == 'comment') {
comment = comments[key];
continue;
}
var mytype = typeof(comments[key]);
if (mytype == 'object'
|| mytype == 'array') {
out=getall(comments[key],out);
};
}
if (cuser !== undefined) {
if (out[cuser] === undefined) {
out[cuser] = [];
}
out[cuser].push(comment);
}
return (out);
}
b=getall(a);
console.log(b);
a here - parsed JSON, b - result;
b structure is
{user1: [comment,comment,comment],user2: [] ...}
check http://jsfiddle.net/NkTst/2/ if you still need extended info on comments
这就是我不得不在 python 中执行此操作时所做的:(它不完整,我将尝试在稍后在 javascript 中执行此操作以进行实践。)我发布了这个,因为递归的概念在这个中更加清晰。
#Builds the names and makes a nested list with {"table.hierarchy.id":value} pairs:
def undic(dic,levs=0,tmp=""):
if(isinstance(dic,dict)):
return([undic(dic[d],levs=levs+1,tmp=tmp+d+".") for d in dic.keys()])
else:
return {tmp : dic}
#Flattens the list to something we can easilly work with:
def flat_content(dic):
ll=undic(dic)
if(isinstance(ll[0],dict)):
return(ll)
return(reduce(lambda x,y:x+y,ll))
然后找到唯一的列名并将行名保留在第零级层次结构中,制作一些实用程序函数来处理丢失的键等(我用 .update({"missingKey":""}) 做到了,你有一个漂亮的小 json 到表格转换器(轻松转换为 CSV)!
不过,您问题中的 json 不可见。