【发布时间】:2021-07-02 11:59:36
【问题描述】:
我的代码获取一个 json 路径文件,打开/解析它并在设置的 csv 映射文件的帮助下打印出所需的值(知道要查找的关键字和打印值的名称)。
然而,一些 json 文件有多个值,例如,带有“Affiliate”键的 json 文件内部将有更多的键/值对,而不仅仅是一个值。
如何在像这样的键中解析并打印出“真”值与“假”值?目前,我的代码将打印出该目标键中的整个键值对数组。
示例 json:
"Affiliate": [
{
"ov": true,
"value": "United States",
"lookupCode": "US"
},
{
"ov": false,
"value": "France",
"lookupCode": "FR"
}
]
我的代码:
import json
import csv
output_dict = {}
#maps csv and json information
def findValue(json_obj, target_key, output_key):
for key in json_obj:
if isinstance(json_obj[key], dict):
findValue(json_obj[key], target_key, output_key)
else:
if target_key == key:
output_dict[output_key] = json_obj[key]
#Opens and parses json file
file = open('source_data.json', 'r')
json_read = file.read()
obj = json.loads(json_read)
#Opens and parses csv file (mapping)
with open('inputoutput.csv') as csvfile:
fr = csv.reader(csvfile)
for row in fr:
findValue(obj, row[0], row[1])
#creates/writes into json file
with open("output.json", "w") as out:
json.dump(output_dict, out, indent=4)
【问题讨论】:
-
您能否将
inputoutput.csv的相关行添加到您的问题中?此外,您不会关闭source_data.json。我建议你在那里也使用with open模式...... -
@Edo Akse csv 文件将只包含像“LastModifiedDate,date_modified”这样的行,其中第一个输入是目标键,第二个是输出键
-
我不确定最终结果应该是 ATM。您不想打印出键
Affiliate的整个值,但是如何确定要输出值列表的哪一部分? -
是的,所以基本上 csv 文件会告诉程序还要寻找什么关键词,所以在“附属”这样的情况下,我想我必须改变程序,以便它检查值关键字“ov”为真,如果为真,则返回与真 ov 对应的关键字“值”的值/有效负载。只是一些最终的上下文,程序创建并放置值(我们在 json 中搜索),以及它们对应的输出词(我们给它们),因此 csv 文件将是 Affiliate、Cntr 和创建的 json 文件看起来类似“Cntr”{美国}