簡體   English   中英

如何使用Python解碼JSON

[英]How to decode JSON with Python

我從reddit.com獲得了我的JSON,基本上是這樣的。 我已經做了很多閱讀,但我真的不明白如何從這個JSON中獲取我想要的信息(我想要一個故事鏈接列表)。 我知道我可以將JSON“解碼”成字典,但是我是否需要在整個JSON中重復以獲得我需要的東西?

提前致謝。

如果您使用的是Python 2.6或更高版本,請使用內置的json庫。 否則,使用具有完全相同接口的simplejson

您可以自適應地執行此操作,而無需使用以下代碼自行檢查Python版本:

try:
    import json
except ImportError:
    import simplejson as json

然后,使用json.loads()或其他任何適當的。

import urllib2
import json

u = urllib2.urlopen('http://www.reddit.com/.json')
print json.load(u)
u.close()

我假設您將數據解析為字典,然后從中提取相關位。

你可以使用適當的python庫在python中解析json

在使用json庫將其解析為dicts和list 之后 ,有兩種方法可以用Python“解碼”json。

首先,通過索引訪問它,如下所示:

url_list = [t['entries'][0]['url'] for t in data['windows'][0]['tabs']]

或者,您可以迭代其樹結構。 下面的示例函數不是通用的,它只是說明在解析樹時需要以不同的方式考慮JSON的三種不同類型的“節點”。 密鑰的“值”可能是數據,沒有密鑰的子節點列表,或者基本上是新JSON對象的字典。 您不能像在常規樹中那樣檢查每個節點的名稱,數據和子項。

def depthFirstSearch(self, jsonobj, target, parentKey=None):
        if isinstance(jsonobj, dict):
            for key, value in jsonobj.items():
                if isinstance(value, (dict, list)):
                    self.depthFirstSearch(value, target, key)
                else:   # "data" node
                    if key == target and parentKey not in self.parentsToExclude:
                        self.results.append(value)
                        self.parents[parentKey] += 1
        if isinstance(jsonobj, list):
            for value in jsonobj:
                #lists don't have keys, pass along key from last dict
                self.depthFirstSearch(value, target, parentKey)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM