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}