我有一个如下文本文件
A : abc
B : crs
C : rds
D : fgh
A: wer
B : tyu
C : uio
D : dfg
输入文本文件中可以有任意数量的上述块。我想从中创建一个json文件。这是我的代码:
import json
with open("<input file path>") as fd: # open file
d = dict(line.split(":", 1) for line in fd) # create dict of it
print json.dumps(d) # print dict in json format
但是这不是在做这个工作,它省略了一些初始线而不是一个在另一个之下打印单独的块
答案 0 :(得分:0)
您的文件具有非唯一键。请注意Python's json
module only supports JSON object decoding with duplicate keys。您不能使用标准编码器使用重复键对JSON对象进行编码。
此外,您使用Python的dict
类作为中间数据存储。因此,您丢失了数据条目订单,因为dict
不维护商品订单。 OrderedDict
类确实维护了项目顺序,但仍然不允许重复键,所以它也不是一个选项。
因此,除非您能在PyPI上找到支持对象的重复键编码的JSON包,否则您可能必须编写自己的JSON编码器。
所以最终的解决方案应如下所示:
JSONEncoder
将数据视为列表)。JSONEncoder
的编码器类,它覆盖default
方法,并为自定义数据类的实例定义自己的自定义转换。有关如何完成的详细信息,请参阅Python Docs: To extend this to recognize other objects, subclass and implement a default() method with another method that returns a serializable object for o if possible, otherwise it should call the superclass implementation (to raise TypeError).
答案 1 :(得分:0)
我修改了你的代码:
[
{
"A": "abc",
"C": "rds",
"B": "crs",
"D": "fgh"
},
{
"A": "wer",
"C": "uio",
"B": "tyu",
"D": "dfg"
}
]
如果我理解正确,您可以使用以下输出:
{{1}}