在python中创建迭代的json文件?

时间:2013-11-18 19:18:03

标签: python json python-2.7

目前我正在使用:

import json
jsonlist = ["data", "test", "row", "blah", "boo"]

with open('test.txt', "wb") as jsfile:
    jsfile.write(json.dumps(jsonlist))

我目前的输出是:

["data", "test", "row", "blah", "boo"]

想象我想要一个迭代的json文件,如下所示:(如果这是正确格式化的)

[1: "data",
2: "test",
3: "row",
4: "blah",
5: "boo"]

我的实际数据是相当大的html块,这只是我如何做的一个例子......

有谁知道我怎么做到这一点?

1 个答案:

答案 0 :(得分:6)

很少考虑如何将一个JSON表示转换为另一个JSON表示;相反,将一个Python对象转换为另一个,然后用JSON表示。

所以,例如,给定这个Python列表:

["data", "test", "row", "blah", "boo"]

...也许你想要这个词:

{1: "data", 2: "test", 3: "row", 4: "blah", 5: "boo"}

...将JSONify发送给:

'{"1": "data", "2": "test", "3": "row", "4": "blah", "5": "boo"}'

请注意,密钥已变为字符串。 JSON对象的键必须是字符串。如果那不是你想要的,你不需要JSON对象。在这种情况下,你可能想要一个对列表,它们将变成JSON数组的JSON数组(因为数组可以将数字作为值)?

enumerate可以将列表转换为(index, value)对列表,dict可以将(key, value)对列表转换为词典:

jsonlist = ["data", "test", "row", "blah", "boo"]
jsondict = dict(enumerate(jsonlist, 1))
with open('test.txt', "wb") as jsfile:
    jsfile.write(json.dumps(jsondict))

或者,如果您只是想要一个数组数组,请停在enumerate。因为enumerate实际上为你提供了一个迭代器,而不是一个序列,你必须将它包装在list中:

jsonlist = ["data", "test", "row", "blah", "boo"]
jsonpairs = list(enumerate(jsonlist, 1))
with open('test.txt', "wb") as jsfile:
    jsfile.write(json.dumps(jsonpairs))

请注意,因为Python使用基于0的索引,所以我必须将start参数传递给enumerate,从1开始计数而不是0。