在Python中输出布尔值是否有最佳实践?我正在生成一些JSON(通过Django模板),默认情况下,所有布尔值都以大写字母输出,与JSON标准相反(即“True”而不是“true”)。
目前,我使用str.lower()格式化每个布尔字符串,但是有更好的方法吗?
答案 0 :(得分:6)
好吧,然后使用json
序列化为JSON,而不是一些自定义的东西。
import json
print json.dumps({'foo': True}) # => {"foo": true}
答案 1 :(得分:5)
执行此操作的方法是不使用模板。使用json模块,如下所示:
import json
def my_view(request):
# ...
json_d = dict(...)
return json.dumps(json_d)
我首选的方法是写一个装饰器,并返回一个词典。
def json_view(f):
def wrapped_f(*args, **kwargs):
return json.dumps(f(*args, **kwargs))
wrapped_f.original = f # for unit testing
return wrapped_f
@json_view
my_view(request):
# ...
return dict(...)
答案 2 :(得分:2)
使用json module:
>>> import json
>>> json.dump(dict(value=True), sys.stdout)
{"value": true}
答案 3 :(得分:1)
更好的方法是避免手工生成JSON,或者通过Django模板生成JSON,而是使用适当的JSON库。在Python 2.6+中,这就像import json
一样简单。在较旧的Pythons中,您需要pip install simplejson
和import simplejson as json
。
自己生成适当的JSON可能很困难 - 您手动序列化bool
值的经验仅仅是个开始。再举一个例子,如何使用嵌套引号正确转义字符串?