我想反序列化JSON,我预先定义了这个模式。 这里是我处理的一个典型的JSON文件。你知道吗
{'op': 'mcm',
'id': 1,
'clk': 'AKjT4QEAl5q/AQCW7rIB',
'pt': 1563999965598,
'mc': [{'id': '1.160679253',
'rc': [{'atl': [[1.18, 88.5],
[1.17, 152.86],
[1.16, 175.96],
[1.14, 93.3],
[1.08, 28.08],
[1.07, 8.84],
[1.02, 129.74]],
'id': 1}]}]}
我想要一个这样的模式:
{'op': String,
'id': Integer,
'clk': String,
'pt': Integer,
'mc': [{'id': String,
'rc': [{'atl': Array(Decimal),
'id': Integer}]}]}
我知道用PySpark可以做到这一点,但我正在寻找一种更轻的解决方案(例如在json
包的顶部)。你知道吗
以下是我迄今为止已经尝试过的:
JSONDecoder
(https://docs.python.org/3/library/json.html#json.JSONDecoder)和自定义parse_float
,parse_int
,parse_constant
函数:这些函数只将要解析的字符串作为参数,我必须以相同的方式处理'1.160679253'
(紧跟在pt
之后)和'1.18'
(紧跟在atl
之后),同时我希望'1.160679253'
保持字符串,而'1.18'
被转换为十进制。你知道吗提前谢谢你的帮助
您的第一种方法是最轻量级的方法,因为它只需要标准库—只需使用一个基于
json
包的定制函数就可以了。对于浮点->;十进制转换和精度损失,json.loads()
具有parse_float
参数以强制立即将浮点数解析为小数:至于ID字段,由于其独特的float-similar格式,它也将被解析为
Decimal
——作为特例,您可以通过str()
将其转换回字符串,而不会丢失任何信息。你知道吗相关问题 更多 >
编程相关推荐