python - 如何处理json空值

标签 python json dictionary

我是 Python 新手,我正在尝试打开一个如下所示的 json 文件:

{
  "empty_char":"",
  "empty_number": ,
  "char":"i'm a char",
  "number":0
}

假设这是 test.json 文件:

当尝试在 python 中打开它时,我正在使用:

import json

with open('test.json') as f:
    data = json.load(f)

它会引发以下错误:

Traceback (most recent call last):
  File "<input>", line 2, in <module>
  File "C:\ProgramData\Anaconda3\Lib\json\__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\ProgramData\Anaconda3\Lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\ProgramData\Anaconda3\Lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\ProgramData\Anaconda3\Lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 3 column 19 (char 39)

由于“empty_number”:,而给出错误,

如果我无法修改 .json 文件,如何处理此错误?

最佳答案

您可以使用更灵活的yaml读取未提供为 None 的值。

import yaml
from io import StringIO

mystr = StringIO("""{
  "empty_char":"",
  "empty_number": ,
  "char":"i'm a char",
  "number":0
}""")

# replace mystr with open('test.json', 'r')
with mystr as stream:
    res = yaml.load(stream)

print(res, type(res))

{'empty_char': '', 'empty_number': None, 'char': "i'm a char", 'number': 0}
<class 'dict'>

注意io.StringIO让我们像读取文件一样读取字符串。

关于python - 如何处理json空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50472520/

相关文章:

python - 字符串中的递增数字

python - 如何在python中将特定整数转换为日期时间

html - 在 GoLang 中将 Json 数据映射到 Html 模板

c# - 是否可以在 C# 中获取对字典项的引用?

python - 在列表中的元素之间添加元素

python - Scikit Learn SGDClassifier Partial_Fit 错误

arrays - 将一维字符串数组转换为json文件

java - Jersey Jackson 序列化父字段

Java - 在基于图 block 的游戏中创建洞穴时遇到问题

python - 将两个列表合并为字典时保留顺序