我有一个包含字典的字符串,里面有一个字段,其值包含元组列表。当我尝试将字符串加载到json中时,它会失败。
格式如下
{'info_scetion': {'category1': [('response 1', '{"tag1":"str1", "tag2":"str2"}')]}}
这是我收到的特殊输入之一,它是唯一一个包含元组列表的输入。我没有生成输入,所以我无法更改格式。因为JSON不能直接解析这个字符串,所以我在考虑尝试识别字符串中的元组并将其选中。对于其余部分,代码应该能够处理。
问题是,我不知道该怎么做。我试图形成一个使用(
和)
的正则表达式,以(.*?)
等某些形式获取第一个发生率,但我不能保证在其中没有任何)
实际元组。
如果我按照这个方向行事,我该如何正确识别元组?
如果有另一种方法可以做到,那是什么?
编辑:在最后添加}
答案 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