Как проблема объясняет проблему, я пытаюсь создать вложенный объект JSON. В этом случае у меня есть for
петли, получающие данные из словаря dic
. Ниже приведен код:Создание динамического вложенного объекта JSON и массива - python
f = open("test_json.txt", 'w')
flag = False
temp = ""
start = "{\n\t\"filename\"" + " : \"" +initial_filename+"\",\n\t\"data\"" +" : " +" [\n"
end = "\n\t]" +"\n}"
f.write(start)
for i, (key,value) in enumerate(dic.iteritems()):
f.write("{\n\t\"keyword\":"+"\""+str(key)+"\""+",\n")
f.write("\"term_freq\":"+str(len(value))+",\n")
f.write("\"lists\":[\n\t")
for item in value:
f.write("{\n")
f.write("\t\t\"occurance\" :"+str(item)+"\n")
#Check last object
if value.index(item)+1 == len(value):
f.write("}\n"
f.write("]\n")
else:
f.write("},") # close occurrence object
# Check last item in dic
if i == len(dic)-1:
flag = True
if(flag):
f.write("}")
else:
f.write("},") #close lists object
flag = False
#check for flag
f.write("]") #close lists array
f.write("}")
Ожидаемый результат:
{
"filename": "abc.pdf",
"data": [{
"keyword": "irritation",
"term_freq": 5,
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
}]
}, {
"keyword": "bomber",
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
}],
"term_freq": 5
}]
}
Но в настоящее время я получаю выход, как показано ниже:
{
"filename": "abc.pdf",
"data": [{
"keyword": "irritation",
"term_freq": 5,
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
},] // Here lies the problem "," before array(last element)
}, {
"keyword": "bomber",
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
},], // Here lies the problem "," before array(last element)
"term_freq": 5
}]
}
Пожалуйста, помогите, я пытаюсь решить это, но не удалось. Пожалуйста, не отмечайте его дубликат, так как я уже проверил другие ответы и не помог вообще.
Edit 1: Ввод в основном взяты из словаря dic
, тип которого отображение <String, List>
, например: «раздражение» => [1,3,5,7,8] где раздражение является ключевым, и отображается на список номеров страниц. Это в основном прочитано во внешнем цикле, где ключ - это ключевое слово и значение - список страниц появления этого ключевого слова.
Edit 2:
dic = collections.defaultdict(list) # declaring the variable dictionary
dic[key].append(value) # inserting the values - useless to tell here
for key in dic:
# Here dic[x] represents list - each value of x
print key,":",dic[x],"\n" #prints the data in dictionary
Если это правильно сформированный файл 'json', вы можете использовать модуль' json' вместо импорта в качестве текста. Можете ли вы предоставить какие-либо детали вашего входного файла? – asongtoruin
вход длинный процесс, я отредактирую ответ с абстракцией ввода –
Почему вы не используете json.dump, а затем обновляете объект JSON по мере поступления большего количества данных? –