在python中创建迭代json文件?
目前我正在使用:在python中创建迭代json文件?,python,json,python-2.7,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文件,如下所示:(如果格式正确) 我的实际数据是相当大的html块,这
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文件,如下所示:(如果格式正确)
我的实际数据是相当大的html块,这只是我如何处理的一个示例…
有人知道我如何做到这一点吗?很少值得考虑如何将一个JSON表示转换为另一个JSON表示;相反,将一个Python对象转换成另一个,然后用JSON表示 例如,给定以下Python列表:
["data", "test", "row", "blah", "boo"]
…也许你想要这句话:
{1: "data", 2: "test", 3: "row", 4: "blah", 5: "boo"}
…这将使:
'{"1": "data", "2": "test", "3": "row", "4": "blah", "5": "boo"}'
请注意,这些键已转换为字符串。JSON对象的键必须是字符串。如果这不是您想要的,那么您就不需要JSON对象。在这种情况下,您可能需要一个对列表,它将变成JSON数组的JSON数组(因为数组可以将数字作为值)
可以将列表转换为(索引,值)
对列表,并且可以将(键,值)
对列表转换为dict:
jsonlist = ["data", "test", "row", "blah", "boo"]
jsondict = dict(enumerate(jsonlist, 1))
with open('test.txt', "wb") as jsfile:
jsfile.write(json.dumps(jsondict))
或者,如果您只需要一个数组数组,请在枚举
处停止。由于enumerate
实际上为您提供了值的迭代器,而不是序列,因此您必须将其包装在列表中
:
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开始计数。很少有必要考虑如何将一个JSON表示转换为另一个JSON表示;相反,将一个Python对象转换成另一个,然后用JSON表示
例如,给定以下Python列表:
["data", "test", "row", "blah", "boo"]
…也许你想要这句话:
{1: "data", 2: "test", 3: "row", 4: "blah", 5: "boo"}
…这将使:
'{"1": "data", "2": "test", "3": "row", "4": "blah", "5": "boo"}'
请注意,这些键已转换为字符串。JSON对象的键必须是字符串。如果这不是您想要的,那么您就不需要JSON对象。在这种情况下,您可能需要一个对列表,它将变成JSON数组的JSON数组(因为数组可以将数字作为值)
可以将列表转换为(索引,值)
对列表,并且可以将(键,值)
对列表转换为dict:
jsonlist = ["data", "test", "row", "blah", "boo"]
jsondict = dict(enumerate(jsonlist, 1))
with open('test.txt', "wb") as jsfile:
jsfile.write(json.dumps(jsondict))
或者,如果您只需要一个数组数组,请在枚举
处停止。由于enumerate
实际上为您提供了值的迭代器,而不是序列,因此您必须将其包装在列表中
:
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开始计数。这是无效的JSON。你到底想做什么?@DanielRoseman因此我的如果格式正确
注释,我正在尝试使用项目列表创建一个有效的迭代json文件…你尝试过缩进
关键字吗json.dumps(python_对象,缩进=4)
但什么是“迭代json文件”?这是什么意思?它看起来像什么?你会用它做什么?你说的“迭代”到底是什么意思?您是否希望输出一个具有递增数字键的字典?这不是有效的JSON。你到底想做什么?@DanielRoseman因此我的如果格式正确
注释,我正在尝试使用项目列表创建一个有效的迭代json文件…你尝试过缩进
关键字吗json.dumps(python_对象,缩进=4)
但什么是“迭代json文件”?这是什么意思?它看起来像什么?你会用它做什么?你说的“迭代”到底是什么意思?你想输出一个数字键越来越多的字典吗?关于你的第二个版本(使用pairs),我得到一个错误:TypeError:JSON不是可序列化的吗
他想说的是list(enumerate(jsonlist,1))
@Robᵩ: 谢谢出于某种原因,我忘记了enumerate
是2.x中为数不多的3.x风格函数之一,从添加到语言中的那一天起返回一个自定义迭代器。关于第二个版本(使用pairs),我得到了一个错误:TypeError:JSON不是可序列化的吗
他是说list(enumerate(jsonlist,1))
@Robᵩ: 谢谢出于某种原因,我忘记了enumerate
是2.x中为数不多的3.x风格函数之一,它从添加到语言中的那一天起返回一个自定义迭代器。