Python 如何使用exec()更改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(".", "")

我有个问题。现有项目需要json更改,在此之前我使用jmespath,一切正常,但现在我需要添加到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)
我之前是这样打开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
before
cmd
,但这可能随时发生变化。