Python中的动态JSON
我需要动态构建以下JSON结构Python中的动态JSON,python,json,Python,Json,我需要动态构建以下JSON结构 json = { "mainkey":"val1", "key2":[ {"keya":"val1rec1","keyb":"val2rec1","keyc":"val3rec1"}, {"keya":"val1rec2","keyb":"val2rec2","keyc":"val3rec2"}, {"keya":"val1rec3","keyb":"val2rec3","keyc":"val3rec3"}, {"keya"
json = {
"mainkey":"val1",
"key2":[
{"keya":"val1rec1","keyb":"val2rec1","keyc":"val3rec1"},
{"keya":"val1rec2","keyb":"val2rec2","keyc":"val3rec2"},
{"keya":"val1rec3","keyb":"val2rec3","keyc":"val3rec3"},
{"keya":"val1rec4","keyb":"val2rec4","keyc":"val3rec4"},
{"keya":"val1rec5","keyb":"val2rec5","keyc":"val3rec5"}
]
}
只有“{”keya:“val1rec1”,“keyb:“val2rec1”,“keyc:“val3rec1”}”,行“迭代”-即从CSV文件读取值,然后根据CSV文件中的内容填充/创建行
我的伪代码如下所示:
#create dict
path = 'somewhere\on\my\disk\file.csv'
json_file = {}
json_file['mainkey'] = "val1"
#read from CSV file
df1 = pd.read_csv(path, header=None)
#iterate through csv
for row,s in df1.iterrows():
number = df1.loc[row,0]
#I'm reading keyb and keyc values from CSV as well, but for brevity my substitution below is not showing that....
json_file['key2'] = "'keya':'"+str(number)+"','keyb':'whatever','keyc':'whatever'"
print (json_file)
显然,它无法生成我在上面寻找的内容-因此,我在这里发表文章寻求帮助。您正在覆盖
key2
值,而您应该将它们附加到列表中:
json_file['key2'] = []
for row,s in df1.iterrows():
number = df1.loc[row,0]
json_file['key2'].append({'keya': str(number), 'keyb': 'whatever', 'keyc': 'whatever'})
print (json_file)
看起来您正在尝试手动构造json编码器,这是不必要的,因为有一个很好的解决方案 我建议您使用本机数据结构构建dict,并使用内置json实用程序。这将产生更干净、更易于维护的代码,并且不容易出错 像这样:
import json
# ... Other imports you may have such as pandas
path = "somewhere\on\my\disk\file.csv"
# Initialize dict
data = {"mainkey": "val1", "key2": list()}
# Parse CSV file
df1 = pd.read_csv(path, header=None)
# iterate through csv
for row,s in df1.iterrows():
number = df1.loc[row,0]
# I'm reading keyb and keyc values from CSV as well,
# but for brevity my substitution below is not showing that....
data['key2'].append({
"keya":number,
"keyb":"whatever",
"keyc":"whatever",
})
# Print json to stdout/terminal
json_data = json.dumps(data)
print(json.dumps(data, sort_keys=True))
# Save json to file (data.json)
with open("data.json", "w") as output:
json.dump(data, output, sort_keys=True)
你能提供你正在使用的csv文件吗?至少有一个示例。在进一步查看代码后,您似乎尝试为key2手动构建json对象结构,但在此之前使用适当的dict结构。请参阅my以了解更多详细信息。谢谢,我想我理解您的建议-但是,当我这样做时,json的顺序不正确-将“mainkey”打印为文件中的最后一个键?这不重要,因为hashmaps/Dict是无序的。然而,在Python 3.6中,dict是默认排序的。好吧,我为您做了更多的挖掘工作,如果您希望排序,可以将sorted_keys=True传递给json.dump。如果使用Python3.6/3.7就足够了,如果您使用的是和更早的版本,则必须使用OrderedICT。您还可以使用indent=X控制缩进。请参阅我更新的答案,了解排序实现。如果这对您不起作用,请提供您正在使用的python版本,否则我将无法进一步帮助您。谢谢。还发现顺序无关紧要,因此您的解决方案工作正常。