【问题标题】:python json boolean to lowercase stringpython json布尔到小写字符串
【发布时间】:2011-11-12 05:52:16
【问题描述】:

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

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

【问题讨论】:

    标签: python django string json boolean


    【解决方案1】:

    好吧,然后使用 json 序列化为 JSON,而不是一些自定义的东西。

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

    【讨论】:

      【解决方案2】:

      这样做的方法是不使用模板。使用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 模块。
      【解决方案3】:

      使用json module

      >>> import json
      >>> json.dump(dict(value=True), sys.stdout)
      {"value": true}
      

      【讨论】:

        【解决方案4】:

        更好的方法是避免手动或通过 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
        猜你喜欢
        • 2014-10-11
        • 2015-02-24
        • 2017-07-31
        • 2015-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 2020-09-13
        相关资源
        最近更新 更多