【发布时间】:2021-10-17 12:25:54
【问题描述】:
我有一个场景,我正在运行生成如下文本文件(demo.txt)数据的命令:
{
"id" : "aaaaaaaabhikz75nc3wkao54xhuv245ye6zmjhcecralymbjo3hhvh5qtugq",
"name" : "zsssd",
"description" : "testfiler",
"ticket" : null,
"cId" : "yu2tiwguc45t6t5ej25pfzpevfhpcbbjjxjjvw6wa",
"createdBy" : null,
"timeCreated" : null
}{
"id" : "aaaaaaaabhikz75nc3wkao54xhuv245ye",
"name" : "klsssd",
"description" : "testfiler2",
"ticket" : null,
"cId" : "yu2tiwguc456wa",
"createdBy" : null,
"timeCreated" : 107635378859
}
我想将其转换为 json 并提取有关名称的信息,并在其在每个循环中运行时将 flp (参考下面的代码)值附加到它并将其存储在一个字典中。
以下是我尝试过的
flp = ["modeltf","modeltz"]
for r in flp:
res = subprocess.call(['java', '-jar','dem.jar', 'dataname', '-o', 'demo.txt', '-f', r])
with open('demo.txt') as in, with open('demo.json','w') as out:
json_string = json.dumps(in, default=lambda o: o.__dict__, sort_keys=True, indent=2)
这没有按预期工作,任何线索都会很棒
想要的结果:[{"name" : "zsssd", "flp" : "modeltf"}, {"name" : "klsssd", "flp" : "modeltz"}]
第一个循环为modeltf 运行,接下来它为modeltz 运行
谢谢
编辑
flp = ["modeltf","modeltz"]
for r in flp:
res = subprocess.call(['java', '-jar','dem.jar', 'dataname', '-o', 'demo.txt', '-f', r])
with open("namespaces.txt") as f:
demo = f.read().replace("\n","")
records = re.findall(r"\{[^\}]*\}", demo)
dictionaries = [json.loads(r) for r in records] # this creates the dictonary out of the demo.txt file.
现在我正在尝试从列表字典中获取名称,并尝试将其与 flp 项目进行映射以获得此结果。
[{"name" : "zsssd", "flp" : "modeltf"}, {"name" : "klsssd", "flp" : "modeltz"}]
使用:
results = [{"name": name, "flp": flp} for name,flp in zip(names, flp)]
但它不会遍历完整的数据,只输出第一个 dict 项。
【问题讨论】:
-
字符串“testfiler”和“testfiler2”应该如何从“描述”键移动到“名称”键,以及输入文件中的其他键应该如何不在结果中?没有任何代码尝试这样做。
-
@mkrieger1 我的错,这是一个错字,我已经改正了
-
"这没有按预期工作" 您的实际结果是什么?根据您自己诊断问题的尝试,您认为哪里出了问题?
-
flp值的重要性是什么?我在你的代码中没有看到任何使用它们的东西。 -
@KarlKnechtel 使用
flp值我正在循环并作为输入传递给子进程调用。我编辑了问题
标签: python json python-3.x