我已经切换到orjson,因为它更快,但这引起了一个问题,我已经有相当长的一段时间了,但从来没有想过它。我最终决定做一些测试,这些就是我的测试。
import orjson, json
data = json.dumps({"channel_id" : None, "payment_source_id" : None})
print(data)
data = orjson.dumps({"channel_id" : None, "payment_source_id" : None}).decode("utf-8")
print(data)
{"channel_id": null, "payment_source_id": null}
{"channel_id":null,"payment_source_id":null}这是我的测试文件。运行此命令时,您会看到唯一的区别是null和引号之间的空格。当我尝试使用orjson转储json数据并将其发送到一个请求中时,我收到了一个400个错误的请求,有时根本没有返回任何东西,但是当我尝试使用json lib时,我得到了一个有效的响应。我不知道该怎么做,因为就像我说的,唯一的区别是空格。有没有人有类似的问题,可以告诉我发生了什么,或者我做错了什么?还有一件事需要注意的是,如果我的代码中没有“None”,orjson就可以正常工作。
发布于 2020-07-09 08:24:27
我认为这没有什么不同。请检查以下内容:
import orjson, json
data1 = json.dumps({"channel_id" : None, "payment_source_id" : None})
data2 = orjson.dumps({"channel_id" : None, "payment_source_id" : None}).decode("utf-8")
print(json.loads(data2))
print (orjson.loads(data1))
{'channel_id': None, 'payment_source_id': None}
{'channel_id': None, 'payment_source_id': None}空格的不同之处在于字符串。如果您加载到json,结果将是相同的。如果在调用api时,将string转换为json,则可以成功。
发布于 2021-11-17 22:47:01
orjson通过发出:而不是:和,来节省几个字节(分隔符后的空格),而不是像原生json模块默认情况下发出,。
原生json模块有一个选项,可以使用分隔符参数更改此行为,而orjson则没有。
在我看来,除非您正在测试任何json模块生成的内容的正确性,并且应该已经存在于您使用的由其作者编写的模块的测试套件中,否则我可能不会通过断言字节/字符串输出进行测试。相反,正如前面的注释所暗示的那样,在从json转换python对象内容之后,断言它的全部/部分。测试中的任何json模块如果不能反序列化/加载,无论如何都会失败。
(注意: orjson产生字节,而json产生_str_ings。)
>>> import orjson
>>> import json
>>> orjson.dumps({"hello":"world"})
b'{"hello":"world"}'
>>> json.dumps({"hello":"world"})
'{"hello": "world"}'
>>>
>>> type(orjson.dumps({"hello":"world"}))
<class 'bytes'>
>>> type(json.dumps({"hello":"world"}))
<class 'str'>>>> json.dumps({"hello":"world"}, separators=(',', ':'))
'{"hello":"world"}'
>>> orjson.dumps({"hello":"world"}, separators=(',', ':'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: dumps() got an unexpected keyword argumenthttps://stackoverflow.com/questions/62805435
复制相似问题