Python 如何使用exec()更改json?
我有个问题。现有项目需要json更改,在此之前我使用jmespath,一切正常,但现在我需要添加到json中,我尝试这样做:Python 如何使用exec()更改json?,python,json,python-3.x,Python,Json,Python 3.x,我有个问题。现有项目需要json更改,在此之前我使用jmespath,一切正常,但现在我需要添加到json中,我尝试这样做: str = "d[\'start\']" + path[5:len(path)-4].replace("child", "[\'child\']").replace("[*]", "").replace(".", "")
str = "d[\'start\']" + path[5:len(path)-4].replace("child", "[\'child\']").replace("[*]", "").replace(".", "")
str=str[:len(str)-9]+".append(child:[{'cmd': get_result_from_db(id), 'message': result}])"
print(str)
exec(str)
json.dump(d, f,indent=4)
with open('info1.json', encoding="cp1251") as f:
d = json.load(f)
我之前是这样打开json的:
str = "d[\'start\']" + path[5:len(path)-4].replace("child", "[\'child\']").replace("[*]", "").replace(".", "")
str=str[:len(str)-9]+".append(child:[{'cmd': get_result_from_db(id), 'message': result}])"
print(str)
exec(str)
json.dump(d, f,indent=4)
with open('info1.json', encoding="cp1251") as f:
d = json.load(f)
我知道第一段代码看起来很疯狂,但直到exec(str)
我检查了,我的路径被正确解析,下面是异常本身:
AttributeError: 'dict' object has no attribute 'append'
我知道append不适用于列表,但如何将更改上传到json
附言
我将给出一个json文件结构的示例
{
"start": [
{
"cmd": "1",
"message": "main",
"child": [
{
"cmd": "1",
"message": "something."
},
{
"cmd": "3",
"message": "this"
}
]
}
]
}
我想在“message”:“this”
的位置添加一个子项:[{'cmd':从[u db(id),'message':result}获取[u result]。
如何使用指向所需位置的json路径来实现这一点?与其尝试在无法可靠预测长度的字符串中以固定偏移量注入值,不如将json读入字典并进行操作
d['start'][0]['child'].追加({
“cmd”:从数据库(id)获取结果,
“消息”:结果})
dump(d,f,indent=4)
演示:作为旁注,path[5:len(path)-4]
可以写成path[5:-4]
。一个负端点被假定为从一端向后。@tdelaney,嗯,谢谢,我会考虑到这一点,我们真的无法猜测您的输入JSON是什么样子;能否请您的问题包括示例输入和预期输出?为什么使用encoding=“cp1251”
?JSON定义为UTF-8,在JSON流的中间执行词汇替换SAMACK DAB看起来非常脆弱。将它读入一个dict
,修改它,并将其转储回JSON。id
不是一个好的标识符名称,但它当然会起作用(-):可能还要注意,JSON字典中的顺序不是您可以轻松控制的;演示链接当前在所有条目中显示message
beforecmd
,但这可能随时发生变化。