在python中处理json.loads()值错误

2024-09-26 22:50:13 发布

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

当我尝试运行此代码时,我遇到了一个错误

import ujson as json

input = '{"a":NaN}'
print(json.loads(input))

错误

print(json.loads(input))
ValueError: Expected object or value

我浏览了一些博客,发现ujson在执行json.loads操作时不会处理nanNaN

我的最终目标: 我想

  1. 使用ujson将字符串加载为JSON-1格式
  2. 处理这种类型的值错误
  3. 将输入字符串加载到JSON中

注意:我的输入可能是嵌套的json结构

input = {"name":"siva","details":{"id":"111","qualification":nan},"marks":[{"grade1":90,"grade2":null,"grade3":NaN}]}

预期产出

{"a":NaN}
{"name":"siva","details":{"id":"111","qualification":nan},"marks":[{"grade1":90,"grade2":null,"grade3":NaN}]}


有人能提出解决方案吗?


Tags: 字符串nameidjsoninput错误nandetails
3条回答

NaN不是有效的JSON符号,请参阅位于http://json.org/的规范 ujson不支持加载nan/inf。有关详细信息,请参见https://github.com/ultrajson/ultrajson/issues/146

在我看来,试图用null替换nan容易出错。 使用标准库中的json。这里是到relevant part of the docs的链接

最好的选择是使用jsonpickle正确地序列化numpy值

import jsonpickle
import jsonpickle.ext.numpy as jsonpickle_numpy
jsonpickle_numpy.register_handlers()

with open('file.json', 'wb') as _file:
    _file.write(jsonpickle.encode(pairs).encode())

with open('file.json', 'rb') as _file:
    unpacked = jsonpickle.decode(_file.read())

我不确定您所寻求的预期输出是什么(如果您也可以添加它,那就太好了)

以下代码将在没有任何错误的情况下执行:

import json
import re

in1 = '{"Number": nan}'
in1 = re.sub(r'\bnan\b', 'NaN', in1)
print(json.loads(in1))
# {'Number': nan}
in2 = '{"name":"siva","details":{"id":"111","qualification":nan},"marks":[{"grade1":90,"grade2":null,"grade3":NaN}]}'
in2 = re.sub(r'\bnan\b', 'NaN', in2)
print(json.loads(in2))
# {'name': 'siva', 'details': {'id': '111', 'qualification': nan}, 'marks': [{'grade1': 90, 'grade2': None, 'grade3': nan}]}

相关问题 更多 >

    热门问题