让JSON转储字典中的所有值,而不仅仅是一个值?

时间:2018-08-16 20:05:45

标签: python json dictionary printing

我一直在为这个小东西扯掉头发。我要做的就是使用json.dump将一组键和值打印到嵌套列表中的文件中。但是,每当我在JSON嵌套列表中使键或值成为变量时,它只会转储一个值。例如,这些是 the_dictionary 项目:

the_dictionary = {'iphone 3G': 2008, 'iphone 4S': 2011, 'iphone 3GS': 2009, 
                  'iphone 5': 2012, 'iphone 4': 2010}



import json 
for k,v in the_dictionary.items():
    model = (k)
    year = (v)
MY = {}
MY['Stuff'].append({
    "Model": (model),
    "Year": (year),
})
with open('file.txt', 'a+') as f:
    json.dump(MY, f, indent=3, ensure_ascii=False)

`

但是当它打印到file.txt时,我得到的只是...

`"Stuff":[
    {
        "Model:" "iphone 3G",
        "Year:" "2008"
    }
)`

我要所有所有型号和年份打印到此文件。我该怎么做才能使这项工作?转换为列表,然后将列表放入JSON中,还是会做完全相同的事情?

先谢谢您。这是我的第一个StackOverflow帖子,因此,如果我错过了任何内容,我深表歉意。我对Python和JSON还是很陌生,所以这对我写这篇文章没有帮助!

2 个答案:

答案 0 :(得分:0)

在循环之前对dict对象进行详细信息化,否则将覆盖同一对象。

'{"Stuff": [{"Model": "iphone 4S", "Year": 2011}, {"Model": "iphone5", "Year": 2012}, {"Model": "iphone 3GS", "Year": 2009}, {"Model": "iphone 4", "Year": 2010}, {"Model": "iphone 3G", "Year": 2008}, {"Model": "iphone 4S", "Year": 2011}]}'

输出:

with open('file.txt', 'a+') as f:
    json.dump(MY, f, indent=3, ensure_ascii=False)

然后您可以将其写入文件

<rootnode>
    Some text <node1>A Name</node1> some more text <node2>A value</node2>
</rootnode>

答案 1 :(得分:0)

创建json的位时要花点时间,然后将其写入文件(如果确实需要)-将文件访问保持在一个循环中,否则只需在循环结束后添加最后一个值即可。

这可能是一个练习,但是任何与字典和JSON的实际使用接近的事情都需要创建字典,然后将其全部转储到json。

代码中更卑鄙的部分似乎是这样:

import json 
models_dict = {'3G': 2008, 
               '4S': 2011, 
              '3GS': 2009, 
                '5': 2012, 
                '4': 2010}


with open('models.json', 'w') as f:
    json.dump(models_dict, f, indent=3, ensure_ascii=False)