Мне нужно динамически строить следующую структуру JSON.
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 "}," rows "итерации", то есть считывание значений из файла 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)
Очевидно, он не создает то, что я ищу выше - отсюда мой пост здесь для помощи.
Похоже, вы пытаетесь создать json-encoder вручную, это не нужно, поскольку в python встроен отличный json-encoder.
Я бы посоветовал создать свой dict с использованием родной структуры данных и использовать встроенные json-utilites. Это приведет к созданию более чистого кода, поддерживающего обслуживание, и менее подвержен ошибкам.
Как это:
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)
Вы переписываете значения 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)