我有一个JSON输入,它由一系列unicode字符组成: 示例:
input = u'[{
attributes: {
NAME: "Name_1ĂĂÎÎ",
TYPE: "Tip1",
LOC_JUD: "Bucharest",
LAT_LON: "234343/432545",
S70: "2342345",
MAP: "Map_one",
SCH: "1:5000,
SURSA: "PPP"
}
}, {
attributes: {
NAME: "NAME_2șțț",
TYPE: "Tip2",
LOC_JUD: "cea",
LAT_LON: "123/54645",
S70: "4324",
MAP: "Map_two",
SCH: "1:578000",
SURSA: "PPP"
}
}
]
'
如何将此字符串解析为词典列表?我试着用:
import json
json_d = json.dumps(input)
print type(json_d) # string object / Not list of dicts
json_obj = json.loads(json_d) # unicode object / Not list of dicts
我无法解析JSON的内容:
print json_obj[0]["attributes"]
TypeError: string indices must be integers
我使用的是python2.7.11。谢谢你的帮助!你知道吗
请尝试一个简化的示例:
主要问题是字符串不是有效的JSON格式:
如果输入是由您生成的,则修复它。如果它来自其他地方,则需要在用
json
模块加载它之前对其进行编辑。你知道吗请注意,
.load()
方法是如何使用正确的JSON的:正如其他人提到的,您的输入数据不是JSON。理想情况下,应该将其固定在上游,以便获得有效的JSON。你知道吗
但是,如果这超出了您的控制范围,您可以将该数据转换为JSON。你知道吗
主要的问题是那些没有引号的键。我们可以通过使用正则表达式在每行的第一个字段中搜索有效的名称来解决这个问题。如果找到一个有效的名字,我们就用双引号把它括起来。你知道吗
输出
注意,这个代码有点脆弱。它可以处理问题中所示格式的数据,但是如果一行中有多个键值对,它就不起作用了。你知道吗
如前所述,解决这个问题的最佳方法是在上游,在那里生成非JSON。你知道吗
相关问题 更多 >
编程相关推荐