首页 > 解决方案 > 以特定格式转储 JSON 的内容

问题描述

我需要使用以下格式的 Python scipt 文件实际创建一个 Windows INI:

AGENTIP = 1.2.3.4,
VARFILE = C:\Users\output\temp.out
INFOFILE= C:\Users\output\info.out
SYNTEST = Run:Level1/Get
CMDMODE = RUNTESTSUITE

下面是我的 Python 代码,其中我有 JSON 字符串中的数据,然后将内容转储到文件中:

def change_test_details(self, ver, level, grp):
    data = {"AGENTIP" : "1.2.3.4", "VARFILE" : "C:\\Users\\output\\temp.out", "INFOFILE" : "C:\\Users\\output\\info.out", "SYNTEST" :"Run:Level1/Get", "CMDMODE" :"RUNTESTSUITE"}
    data["SYNTEST"] = ver + ":" + level + "/" + grp
    with open("a.txt", 'w') as outfile:
        json.dump(data, outfile,indent=2)

当使用以下参数调用该方法时:

“BETA” “Level5” “套装”

如果文件是最终输出

{
  "AGENTIP": "1.2.3.4",
  "VARFILE": "C:\\Users\\output\\temp.out",
  "INFOFILE": "C:\\Users\\output\\info.out",
  "SYNTEST": "\"BETA\":\"Level5\"/\"Set\"",
  "CMDMODE": "RUNTESTSUITE"
}

有 '{ .. }' 大括号和额外的双引号和 '\' 并且 SYNTEST 的预期值应该是BETA:Level5/Set

如何将 JSON 字符串更改为所需格式?

标签: python

解决方案


json.dump()将对象打印为 json 格式的字符串。因此,当您将其转储到 outfile 中时,您会在文件中获得一个 json 字符串,这就是它应该表现的方式。

您想要的是迭代项目并根据您想要的格式打印它们。

def change_test_details(ver, level, grp):
    data = {"AGENTIP" : "1.2.3.4", "VARFILE" : "C:\\Users\\output\\temp.out", "INFOFILE" : "C:\\Users\\output\\info.out", "SYNTEST" :"Run:Level1/Get", "CMDMODE" :"RUNTESTSUITE"}
    data["SYNTEST"] = ver + ":" + level + "/" + grp
    with open("a.txt", 'w') as outfile:
        for k, v in data.items():
            outfile.write(f'{k} = {v}\n')

change_test_details("BETA", "Level5","Set")

当你运行它时,a.txt 看起来像:

AGENTIP = 1.2.3.4
VARFILE = C:\Users\output\temp.out
INFOFILE = C:\Users\output\info.out
SYNTEST = BETA:Level5/Set
CMDMODE = RUNTESTSUITE

推荐阅读