本文主要是介绍python使用json.loads时出现raise JSONDecodeError(“Expecting value“, s, err.value) from None,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 问题描述
- 原因分析
- NumberInt到底是什么
- 解决方案(正则表达式)
- 参考
问题描述
import json
data_json = '{"name":"abc", "age":NumberInt(19)}'
data_dict = json.loads(data_json)
运行时候会报如下错误:
raise JSONDecodeError(“Expecting value”, s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 22 (char 21)
原因分析
分析可能是NumberInt数据类型不是Expecting value。查询了python的官方文档发现JSONDecoder只识别如下第一列的类型的数据1。
尝试把NumberInt改成数字,发现问题迎刃而解。
import json
data_json = '{"name":"abc", "age":19}'
data_dict = json.loads(data_json)
如何把json字符串中的“NumberInt(19)”转换为“19”呢?如果只有一个这种的还好办,很多NumberInt的话就不太容易了。这时可以用正则表达式来进行替换操作。
NumberInt到底是什么
NumberInt到底是个什么鬼东西?追本溯源找到了下边的文档2。
原来是mongoDB给int类型的数字多加了“NumberInt”这个描述。
解决方案(正则表达式)
下边的代码实现了从NumberInt转化为仅仅包含数字,在json字符串中有应用。
参考
- 基基伟:Python3-正则表达式-部分替换
- 官方文档:https://docs.python.org/3.1/library/re.html#text-munging
https://docs.python.org/3.7/library/json.html?#encoders-and-decoders ↩︎
https://www.mongodb.com/docs/v4.4/core/shell-types/#numberint ↩︎
这篇关于python使用json.loads时出现raise JSONDecodeError(“Expecting value“, s, err.value) from None的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!