如何使用 Python 修复 JSON 中未带引号的 nan 值



Python脚本中调用的外部C例程返回一个"大"和"深度"JSON,其中包含某些键的一些不带引号的nan值。

由于这些值,JSON 显示为无效,例如无法通过 websocket 发送。

例如

{'myKey': nan}

如何在不必详尽检查每个值的情况下修复此 JSON? 修复生成 JSON 的源不是一种选择。我需要在通过网络套接字发送之前修复 JSON。

有没有办法用不带引号的nan替换,当我尝试通过 WebSocket emit时,它不会导致错误。

或者,有没有办法配置python-socket.io以允许这些不带引号的nan值?我目前的研究,说它不能。

一个想法(?

我在想,我可以字符串化,用有效的东西替换nan字符串,然后再次 JSONify。

但是我可以用什么替换未引用的nan

更新

json.dumps转换为字符串

replace("nan", "'nan'")或更好,请使用@Jaco答案

json.loads创建 JSON obj

您需要

将 JSON 转换为字符串,然后可以使用正则表达式将 nan 的所有实例替换为 null,然后使用 JSON.load 将其转换回 JSON。

import re
regex = re.compile(r'bnanb',flags=re.IGNORECASE)
re.sub(regex, ' null ', "{'myKey': nan}")

simplejson包可用于处理 json 中的 NaN 值。它的转储方法将ignore_nan作为处理 nan 值的集合。默认值 ignore_nan 为 False,应设置为 True 以处理 nan 值。

import simplejson
response = requests.get(url)  # assume response from url contains some NaN values e.g. {"key": NaN}
normalized_str = simplejson.dumps(response.json(), ignore_nan=True) # this gives string with NaN represented as null e.g. '{"key": null}'
new_dict = simplejson.loads(normalized_str) # this gives back dict from string with null represented as None e.g. {"key": None}

相关内容

  • 没有找到相关文章

最新更新