Python中将JSON布尔值转换为小写字符串。

6

在Python中输出布尔值是否有最佳实践?我正在生成一些JSON(通过Django模板),默认情况下,所有布尔值都以大写字母开头输出,与JSON标准相反(即,“True”而不是“true”)。

目前,我使用str.lower()格式化每个布尔字符串,但是否有更好的方法?

4个回答

10

那么,使用json将其序列化为JSON,而不是使用一些自定义的东西。

import json
print json.dumps({'foo': True}) # => {"foo": true}

7
这可以通过不使用模板,而是使用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(...)

谢谢!目前我正在使用{{variable_name|lower}},但当我遇到这种情况(字符串中带引号等)时,我将重构以使用json模块。 - btk

2
使用 json 模块
>>> import json
>>> json.dump(dict(value=True), sys.stdout)
{"value": true}

1
更好的方法是避免手动生成JSON,或通过Django模板生成JSON,而是使用适当的JSON库。在Python 2.6+中,这很简单,只需import json。在旧版本的Python中,您需要pip install simplejsonimport simplejson as json
自己生成正确的JSON可能很困难——手动序列化bool值只是开始。例如,如何正确转义带有嵌套引号的字符串?

Django附带了一个版本的simplejson模块,如果json模块可用,则会透明地使用它。只需导入它,您就可以获得最佳可用选项:from django.utils import simplejsonfrom django.utils import simplejson as json - Armando Pérez Marqués

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接