我有一个有效的JSON对象,列出了许多自行车事故:
{
"city":"San Francisco",
"accidents":[
{
"lat":37.7726483,
"severity":"u'INJURY",
"street1":"11th St",
"street2":"Kissling St",
"image_id":0,
"year":"2012",
"date":"u'20120409",
"lng":-122.4150145
},
],
"source":"http://sf-police.org/"
}
我正在尝试在python中使用json库来加载数据,然后将字段添加到“accident”数组中的对象。我像这样加载了我的json:
with open('sanfrancisco_crashes_cp.json', 'rw') as json_data:
json_data = json.load(json_data)
accidents = json_data['accidents']
当我尝试写这样的文件时:
for accident in accidents:
turn = randTurn()
accidents.write(accident['Turn'] = 'right')
我收到以下错误:SyntaxError:keyword不能是表达式
我尝试了很多不同的方法。如何使用Python将数据添加到JSON对象?
答案 0 :(得分:4)
首先,accidents
是一个字典,你不能write
到字典;你只需在其中设置值。
所以,你想要的是:
for accident in accidents:
accident['Turn'] = 'right'
你希望write
输出的是新的JSON - 在你完成数据修改后,你可以dump
将它恢复为文件。
理想情况下,您可以通过写入新文件,然后将其移到原始文件上来执行此操作:
with open('sanfrancisco_crashes_cp.json') as json_file:
json_data = json.load(json_file)
accidents = json_data['accidents']
for accident in accidents:
accident['Turn'] = 'right'
with tempfile.NamedTemporaryFile(dir='.', delete=False) as temp_file:
json.dump(temp_file, json_data)
os.replace(temp_file.name, 'sanfrancisco_crashes_cp.json')
但如果你真的想要,你可以就地做到:
# notice r+, not rw, and notice that we have to keep the file open
# by moving everything into the with statement
with open('sanfrancisco_crashes_cp.json', 'r+') as json_file:
json_data = json.load(json_file)
accidents = json_data['accidents']
for accident in accidents:
accident['Turn'] = 'right'
# And we also have to move back to the start of the file to overwrite
json_file.seek(0, 0)
json.dump(json_file, json_data)
json_file.truncate()
如果您想知道为什么会遇到特定错误:
在Python中 - 与许多其他语言不同 - 赋值不是表达式,它们是语句,它们必须单独出现。
但函数调用中的关键字参数具有非常相似的语法。例如,请参阅上面示例代码中的tempfile.NamedTemporaryFile(dir='.', delete=False)
。
因此,Python正在尝试使用关键字accident['Turn'] = 'right'
将您的accident['Turn']
解释为关键字参数。但关键字只能是实际的单词(嗯,标识符),而不是任意表达式。因此,它尝试解释您的代码失败,并且您收到错误keyword can't be an expression
。
答案 1 :(得分:0)
我解决了:
launch_browser=false