如何将python字符串数据转换为列表或dict?
这是我在GCM python中的响应代码如何将python字符串数据转换为列表或dict?,python,json,list,dictionary,Python,Json,List,Dictionary,这是我在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
{"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也不起作用。我试试这个。我错过了什么?请帮我做这件事 如果是字符串,请加载它,不要转储它:
#! /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\u 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']
如果它确实是一个字符串,请使用
json.loads
而不是json.dumps
。Dump=从数据对象到字符串(序列化);load=从字符串到数据对象(反序列化)。我尝试使用json.load…如将响应存储在变量中并在循环中迭代:code
result=[json.loads(resp)for resp in data]code
我得到一个错误:code
ValueError:从第1行第104列(char 104)开始的未终止字符串code
阅读你的问题,尤其是阅读你对给出答案的评论,如果你甚至不知道你的输入是字符串还是其他东西,真的会限制任何人帮助你的能力。我知道我在问什么,现在我把我的问题解释到我被卡住的地步……你也可以在代码中显示,输出是字符串,无法在列表中转换,请原谅,如果我以错误的方式移动最初我尝试加载它,但它显示了一个错误:ValueError:Unterminated string开始于:第1行第104列(char 104),因此首先我转储它,然后加载它,因为json给了我一个错误。当python GCM返回响应对象时,我得到了响应,然后我迭代并将数据存储在一个列表中,或者尝试从json.loads in loop生成一个列表,但没有工作它看起来非常棒的答案,但我遇到了一些问题,我所做的是:GCM给我包含http状态代码的响应对象,当我像这样迭代时:data=for resp in response print resp,然后它向我展示了包含字符串的字典。现在我尝试应用你的解决方案,但它给了我错误“SyntaxError:EOL,当扫描字符串文字时”,它把我的响应弄乱成了字符串块..嘿,感谢这个解决方案,实际上我的数据不是正确的字符串…所以首先我将它设置为d=(''.join(''+resp+''表示g_响应中的resp)),然后应用ast。。。