2017-09-20 63 views
0

//请原谅我可怜的英语。(Python)如何处理复杂的json数据

大家好,我正在做一个关于Facebook评论蜘蛛的项目。 然后我找到Facebook Graph GUI。它会返回一个对我而言非常复杂的json文件。 该json文件包含这么多部分

然后我使用json.loads获取所有的json代码 最后它返回一个字典给我。 和我不知道如何访问价值

例如,我想获得所有的id或评论。 但我只能得到字典“data”和“pading”的两个关键字 因此,我如何得到下一个关键字?如“id”或“comment” 以及如何处理这些复杂的数据。

code

非常感谢你。

+1

Facebook的图形API返回的数据(https://imgur.com/a/xN6sp) –

回答

0

我可以想到的两种方式,要么您知道要查找的内容并直接访问它,要么循环访问键,查看键的值并嵌套另一个循环,直到到达树的末尾。

您可以使用自调用函数并使用适当的jQuery来完成此操作。

下面是一个例子:

function get_the_stuff(url) 
{ 
    $.getJSON(url, function (data) { 
    my_parser(data) }); 
} 

function my_parser(node) 
{ 
    $.each(node, function(key, val) { 
    if (val && typeof val == "object") { my_parser(val); } 
    else { console.log("key="+key+", val="+val); } 
    }); 
} 

予省略所有的错误检查。还要确保typeof检查是适当的。您可能还需要其他一些elseif,以不同的方式处理数字,字符串,null或布尔值。这只是一个例子。

编辑:我可能略微错过了话题说“Python”......对不起。随意翻译成python,同样的原则适用。

EDIT2:现在让我们试着用Python。我假设你的JSON已经被导入到一个变量中。

def my_parser(node, depth=0): 
    if type(node) == "list": 
     for val in node: 
      my_parser(val,depth+1) 
    elif type(node) == "dict": 
     for key in node: 
      printf("level=%i key=%s" % (depth, key)) 
      my_parser(node[key], depth+1) 
    elif type(node) == "str": 
      pritnf("level=%i value=%s" % (depth, node)) 
    elsif type(node) == "int": 
      printf("level=%i value=%i % (depth, node)) 
    else: 
      printf("level=%i value_unknown_type" % (depth)) 
+0

谢谢你的回答,遗憾的是我不明白jQuery的,我很抱歉。 –