在python中反序列化JSON字符串的模式

2024-09-27 02:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想反序列化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包的顶部)。你知道吗

以下是我迄今为止已经尝试过的:

  • 反序列化JSON文件并使用自定义函数设置字典中每个元素的类型:我担心从字符串转换为浮点,然后从浮点转换为十进制时会出现舍入错误。你知道吗
  • 使用自定义JSONDecoderhttps://docs.python.org/3/library/json.html#json.JSONDecoder)和自定义parse_floatparse_intparse_constant函数:这些函数只将要解析的字符串作为参数,我必须以相同的方式处理'1.160679253'(紧跟在pt之后)和'1.18'(紧跟在atl之后),同时我希望'1.160679253'保持字符串,而'1.18'被转换为十进制。你知道吗

提前谢谢你的帮助


Tags: 文件函数字符串ptidjsonstring序列化
1条回答
网友
1楼 · 发布于 2024-09-27 02:24:34

您的第一种方法是最轻量级的方法,因为它只需要标准库—只需使用一个基于json包的定制函数就可以了。对于浮点->;十进制转换和精度损失,json.loads()具有parse_float参数以强制立即将浮点数解析为小数:

>>> import decimal
>>> json.loads('1.1', parse_float=decimal.Decimal)
Decimal('1.1')

至于ID字段,由于其独特的float-similar格式,它也将被解析为Decimal——作为特例,您可以通过str()将其转换回字符串,而不会丢失任何信息。你知道吗

相关问题 更多 >

    热门问题