我试图创建一个JSON对象,它基本上是一个字典。这是我创建字典的代码:
# Adding the data to the JSONData object
JSONData[str(gerechtNaam)] = {
"afbeeldingURL": gerechtAfbeelding,
"receptURL": recept,
"prijs": totalePrijs,
"porties": porties,
"moeilijkheid" :moeilijkheid,
"caloriePortie": calorien,
"voorbereidingsTijd": voorbereidingsTijd,
"wachtTijd": wachtTijd,
"totaleTijd": totaleTijd,
"ingredienten": naamEnKwantiteitIngredienten
}
这将起作用,并生成以下内容:
{
'Gerooktekipsalade met avocado en walnoten': {
'afbeeldingURL': 'https://static-images.jumbo.com/product_images/Recipe_502535-01_560x560.jpg',
'receptURL': 'http://www.jumbo.com/gerooktekipsalade-met-avocado-en-walnoten/502535/',
'prijs': 16.868000000000002,
'porties': '4 porties',
'moeilijkheid': 'Eenvoudig',
'caloriePortie': '842 kcal per persoon',
'voorbereidingsTijd': '15 min',
'wachtTijd': '0',
'totaleTijd': '15 min',
'ingredienten': [
'2 kroppen minisla romaine ',
'200 g cherrytomaatjes',
'4 stengels bleekselderij',
'2 friszoete handappels ',
'380 g Nieuwe Standaard Kip gerookte kipfilet ',
'2 bosuitjes',
'2 avocado',
'150 ml whisky-cocktailsaus',
'3 el bieslook',
'60 g walnoten',
'1 stokbrood',
'1 snufje peper'
]
}
}
然后使用以下代码转换:
with open('receptData.json', 'w') as outfile:
json.dump(JSONData, outfile)
这样就可以工作了,并生成了工作的JSON。唯一的问题是,当尝试在for循环中两次运行代码时,最后一个变量名为'ingredienten',它是在循环中创建的一个列表,被字典中所有对象替换。因此,当创建第二个“ingredienten”数组时,已经创建并添加到JSONData的“ingredienten”数组将被新数组替换。所有其他变量都保持正确,但是每次循环运行时列表/数组都会被替换
所以代码第二次运行时,我得到的字典是:
{
'Gerooktekipsalade met avocado en walnoten': {
'afbeeldingURL': 'https://static-images.jumbo.com/product_images/Recipe_502535-01_560x560.jpg',
'receptURL': 'http://www.jumbo.com/gerooktekipsalade-met-avocado-en-walnoten/502535/',
'prijs': 16.868000000000002,
'porties': '4 porties',
'moeilijkheid': 'Eenvoudig',
'caloriePortie': '842 kcal per persoon',
'voorbereidingsTijd': '15 min',
'wachtTijd': '0',
'totaleTijd': '15 min',
'ingredienten': **[
'4 avocado',
'100 g gerookte zalm',
'8 kleine eieren ',
'25 g alfalfa',
'1 snufje peper',
'1 bakplaat'
]**
},
'Gevulde avocado met ei en zalm uit de oven': {
'afbeeldingURL': 'https://static-images.jumbo.com/product_images/Recipe_502536-01_560x560.jpg',
'receptURL': 'http://www.jumbo.com/gevulde-avocado-met-ei-en-zalm-uit-de-oven/502536/',
'prijs': 8.72,
'porties': '4 porties',
'moeilijkheid': 'Eenvoudig',
'caloriePortie': '234 kcal per persoon',
'voorbereidingsTijd': '10 min',
'wachtTijd': '15 min',
'totaleTijd': '25 min',
'ingredienten': **[
'4 avocado',
'100 g gerookte zalm',
'8 kleine eieren ',
'25 g alfalfa',
'1 snufje peper',
'1 bakplaat'
]**
}
}
其中第一个“ingredienten”列表现在与第二个列表相同,但事实并非如此。我试过很多种方法,但都没用
虽然您还没有展示创建它的代码,但我很确定问题是您正在重用变量
naamEnKwantiteitIngredienten
,这是您正在使用的列表,作为字典中'ingredienten'
键所指向的值。如果该列表被适当地修改(也许是用一组不同的成分填充),如果您还没有将其转储到JSON字符串中,您还可以在以前的字典中看到修改过的版本我认为有两种方法可以解决这个问题
一种是在创建字典之后立即创建JSON,而不是等到以后再创建。虽然这样可以解决这个问题,但可能会给程序带来不便(或者不可能,如果出于其他原因需要同时定义所有词典)
另一种解决方案是确保您创建的词典相互独立。与其在所有列表中重复使用相同的列表,不如确保每个列表都包含一个单独的列表。最明显的解决方法可能是在任何地方创建最终位于
naamEnKwantiteitIngredienten
的值,但是可以在显示的代码中解决它,方法是在将列表放入字典之前复制列表:相关问题 更多 >
编程相关推荐