凡JSON之序列化器,予人择二者而已:
- 简练之机言:
{"a":{"b":{"c":"abc"}},"x":{"y":{"z":"xyz"}}}
- 或繁全之“美观打印”:
{
"a": {
"b": {
"c": "abc"
}
},
"x": {
"y": {
"z": "xyz"
}
}
}
吾欲中道求之:首者,人难遍览;次者,于世之嵌套数据则繁冗不堪。
其意
吾撰微小程序,名曰jsonfold。非欲易Python之JSON序列器,乃于json.dump()输出之上,行轻捷之后续过滤。
其格式化者,择而用之:
- 将小容器折迭于一线之上,
- 将短标量序列打包,
- 使大或繁复之结构得展其形。
例如其出:
{
"a": { "b": { "c": "abc" } },
"x": { "y": { "z": "xyz" } }
}
为何此法?
吾非欲重造序列器——已有良善序列器(含内置者)json.dump()者,能效处诸般,自简数据结体(list/dict)至定制类与Python @dataclass物,施变易而制输出之式。
至若其趣,在 formatter不复析JSON流。其行若流式之裹,绕于类文件之物:
json.dump(obj, JSONFoldWriter(fp), indent=2)
是故,其能驭巨篇而用恒量之忆,行线性之时。此法适于众既有之序列器。复备裹器于json.dump(),json.dumps()。
from jsonfold import dumps
data = {
"a": {"b": {"c": "abc"}},
"x": {"y": {"z": "xyz"}},
}
print(dumps(data))
自制
格式化器可控制之:
- 最大行宽
- 折深
- 装束之锐气,
- 数组/对象之限。
故尔可择保守之格式,抑或更进之压缩。
全文:
中道(无门槛)一可流式化之JSON格式器,与既有序列化器相协
用之至微
拽之jsonfold.py自GitHub项目
import jsonfold
import sys
data = {
"meta": {"version": 1, "ok": True},
"ids": [1, 2, 3, 4, 5],
"items": [{"id": 1, "name": "alpha"}, {"id": 2, "name": "beta"}],
}
# compact can be: default, low, med, high, max
jsonfold.dump(data, sys.stdout, compact="default")
GitHub项目
仓库:https://github.com/yairlenga/jsonfold
Python之实现在下python 文件夹。
后续文章将涵盖其他实现:JavaScript、Java、C、…… —— 请关注 GitHub 项目,或追随 Medium 上的文章。












