-1

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

import ujson as json

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

错误

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

我浏览了一些博客并意识到 ujson在执行操作时不会处理nanNaN值。json.loads

我的最终目标: 我想

  1. 使用 ujson 将字符串加载到 JSON-FORMAT
  2. 处理这种类型的 VALUE ERRORS
  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}]}


任何人都可以为此提出解决方案吗?

4

3 回答 3

0

我不确定您寻求的预期输出是什么(如果您也可以添加它会很棒)。

以下代码将执行而不会出现任何错误:

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}]}
于 2020-10-03T08:58:46.910 回答
0

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

在我看来,尝试替换nannull容易出错。json从标准库中使用。这是文档相关部分的链接

于 2020-10-03T09:03:07.847 回答
0

最好的选择是使用 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())
于 2021-08-18T16:08:42.690 回答