[英]How to convert python string data to list or in dict?
這是我來自GCM-python的響應代碼,
{"multicast_id":6343554431392278573,"success":5,"failure":15,"canonical_ids":0,"results":[{"message_id":"0:1380910865603840%356b
9054f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":
"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1380910865592683%356b9054f9fd7ecd"},{"erro
r":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"er
ror":"NotRegistered"},{"message_id":"0:1380910865600910%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"message_id":"0:1380910865
596592%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"message_id":"0:1380910865595499%356b9054f9fd7ecd"}]}
當我收到此響應時,我想從字典中收集所有錯誤鍵...但是似乎它是一個字符串,我將嘗試使用json.dumps()在json中轉儲,然后刪除斜杠但對我不起作用,甚至沒有工作AST。 我嘗試了這個python json dumps 。 我在那里想念什么? 請幫助我。
如果是字符串,請加載它,不要轉儲它:
#! /usr/bin/python3
import json
a = '''{"multicast_id":6343554431392278573,"success":5,"failure":15,"canonical_ids":0,"results":[{"message_id":"0:1380910865603840%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":
"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1380910865592683%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1380910865600910%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"message_id":"0:1380910865596592%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"message_id":"0:1380910865595499%356b9054f9fd7ecd"}]}'''
j = json.loads(a)
errors = [d for d in j ['results'] if 'error' in d]
print(errors)
由於您收到的數據是有效的Python數據,因此您只需使用[ast.literal_eval] [1]
演示
import ast
data = '''{"multicast_id":6343554431392278573,"success":5,"failure":15,"canonical_ids":0,"results":[{"message_id":"0:1380910865603840%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":
"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1380910865592683%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1380910865600910%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"message_id":"0:1380910865596592%356b9054f9fd7ecd"},{"error":"NotRegistered"},{"message_id":"0:1380910865595499%356b9054f9fd7ecd"}]}'''
>>> pp.pprint(ast.literal_eval(data))
{ 'canonical_ids': 0,
'failure': 15,
'multicast_id': 6343554431392278573L,
'results': [ { 'message_id': '0:1380910865603840%356b9054f9fd7ecd'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'message_id': '0:1380910865592683%356b9054f9fd7ecd'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'error': 'NotRegistered'},
{ 'message_id': '0:1380910865600910%356b9054f9fd7ecd'},
{ 'error': 'NotRegistered'},
{ 'message_id': '0:1380910865596592%356b9054f9fd7ecd'},
{ 'error': 'NotRegistered'},
{ 'message_id': '0:1380910865595499%356b9054f9fd7ecd'}],
'success': 5}
>>>
隨后轉儲錯誤
>>> pp.pprint([elem['error'] for elem in ast.literal_eval(data)['results'] if 'error' in elem])
[ 'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered',
'NotRegistered']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.