处理json.loads

时间:2017-03-10 01:33:53

标签: python

我有一个包含字典的字符串,里面有一个字段,其值包含元组列表。当我尝试将字符串加载到json中时,它会失败。

格式如下

{'info_scetion': {'category1': [('response 1', '{"tag1":"str1", "tag2":"str2"}')]}}

这是我收到的特殊输入之一,它是唯一一个包含元组列表的输入。我没有生成输入,所以我无法更改格式。因为JSON不能直接解析这个字符串,所以我在考虑尝试识别字符串中的元组并将其选中。对于其余部分,代码应该能够处理。

问题是,我不知道该怎么做。我试图形成一个使用()的正则表达式,以(.*?)等某些形式获取第一个发生率,但我不能保证在其中没有任何)实际元组。

如果我按照这个方向行事,我该如何正确识别元​​组?

如果有另一种方法可以做到,那是什么?

编辑:在最后添加}

2 个答案:

答案 0 :(得分:3)

你' JSON'实际上并不是JSON:它是一个Python数据结构,因此使用AST模块解析它:

s = "{'info_scetion': {'category1': [('response 1', '{\"tag1\":\"str1\", \"tag2\":\"str2\"}')]}}"
result = ast.literal_eval(s)
result
#{'info_scetion': {'category1': \
#                 [('response 1', '{"tag1":"str1", "tag2":"str2"}')]}}

将其导入Python后,您可以以任何您喜欢的方式对其进行操作。例如,你可以"压扁"元组列表:

result['info_scetion']['category1'] = list(result['info_scetion']['category1'][0])
#{'info_scetion': {'category1': ['response 1', '{"tag1":"str1", "tag2":"str2"}']}}

答案 1 :(得分:-1)

你的json格式错误,最后错过了}

我用这段代码测试了一些东西似乎很好。

data = {'info_scetion': {'category1': [('response 1', '{"tag1":"str1", "tag2":"str2"}')]}}

print data['info_scetion']['category1'][0][0]
# output >> response 1

print json.loads(data['info_scetion']['category1'][0][1])['tag1']
# output >> str1