2017-09-20 62 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的,我很抱歉。 –