Конвертировать твипный объект JSON в dict - PullRequest
3 голосов
/ 01 февраля 2011

Я хотел бы преобразовать результат вызова Tweepy api.trends_location(woeid) в диктовку (или диктовку диктов), чтобы я мог работать со значениями (на самом деле, я хочу в конечном итоге получить диктат имя значения). В документации Tweepy говорится, что результатом является «объект JSON» ( см. Здесь ), но когда я его получаю, type(retrieved) оценивается как list. Конечно, retrieved имеет len из 1, а retrieved[0] дает мне один предмет:
[{'trends': [{'url': 'http://search.twitter.com/search?q=%23questionsidontlike', 'query': '%23questionsidontlike', 'events': None, 'promoted_content': None, 'name': '#questionsidontlike'}, ], (more of the same), 'created_at': '2011-01-31T22:39:16Z', 'as_of': '2011-01-31T22:47:47Z', 'locations': [{'woeid': 23424977, 'name': 'United States'}]}].

Я могу позвонить json.dumps, что даст хорошо отформатированное представление, но это не очень полезно для меня, а json.loads дает мне: __init__() got an unexpected keyword argument 'sort_keys'

Как мне поступить?

Ссылка на полный код: https://gist.github.com/805129

Ответы [ 4 ]

3 голосов
/ 01 февраля 2011

Хорошо, это должно сделать это!Он даже протестирован (спасибо за публикацию дополнительной информации).

>>> names = [trend["name"] for trend in retrieved[0]["trends"]]
>>> names
['#wishuwould', '#questionsidontlike', '#februarywish', 'Purp & Patron', 'Egyptians', 'Kool Herc', 'American Pie', 'Judge Vinson', 'Eureka Nutt', 'Eddie House']

Я думаю, что большая часть путаницы произошла из документации, относящейся к выводу как к объекту JSON, который отличается от строки JSON, котораянеобходимо преобразовать с помощью модуля json.

Как это работает: retrieved - это список, содержащий один элемент, то есть словарь, содержащий ключ trends, поэтому retrieved[0]["trends"] - этосписок словарей трендов, где каждый словарь трендов содержит интересующую вас клавишу name.

2 голосов
/ 01 февраля 2011

Хотелось бы что-нибудь подобное для вас?

def searchKeys(struct, keys, result = None, recursive = True):
        if result is None:
                result = []

        if isinstance(struct, dict):
                for k in keys:
                        if struct.has_key(k):
                                result.append(struct[k])

                if recursive:
                        for i in struct.values():
                                searchKeys(struct = i, keys = keys, result = result, recursive = recursive)
        elif isinstance(struct, list):
                if recursive:
                        for i in struct:
                                searchKeys(struct = i, keys = keys, result = result, recursive = recursive)

        return result

Пример использования:

>>> searchKeys(struct = a, keys = ['name'])
['United States', '#questionsidontlike']

Рекурсивно идет по иерархии dict / list в поисках набора ключей dict и сохраняет соответствующие значения в list.

1 голос
/ 11 февраля 2017

Чтобы преобразовать объект Tweepy 'Status' в словарь Python (JSON), получите доступ к закрытому члену "_json" для объекта.

tweets = tweepy_api.user_timeline(screen_name='seanharr11')
json_tweets = map(lambda t: t._json, tweets)
0 голосов
/ 01 февраля 2011
>>> import simplejson
>>> a = {"response":[{"message":"ok"},{"message":"fail"}]}
>>> json = simplejson.dumps(a)
>>> simplejson.loads(json)
{'response': [{'message': 'ok'}, {'message': 'fail'}]}

http://docs.python.org/library/json.html

...