【问题标题】:How to force Python JSON output to exclude 'L' from longs如何强制 Python JSON 输出从 long 中排除“L”
【发布时间】:2013-07-16 15:54:20
【问题描述】:

我有一个从 SQL 查询结果创建 JSON 的脚本。我遇到的问题是正在输出的记录的(纪元毫秒)时间戳很长,这是获取带有附加 L 的标准 Python long 表示,而不是“正确”的 JSON 编号:

{'status': 'default', 'ID': '7717''recordTimestamp': 1372651201000L, 'Latitude': 50.836689, 'Longitude': -53.879143}

我正在使用json.dumps(record) 来生成它,但我不知道如何使long 成为 JSON 格式的数字。有没有人可以快速解决这个问题? 谢谢!

编辑:在 Ubuntu 上使用 Python 2.7.4

【问题讨论】:

  • 您正在查看 Python 文字,其中包括一个 L 表示大于 sys.maxint 的整数。这是正常,与 JSON 无关。换句话说,您有一个“正确”的 JSON 编号。
  • 同意@MartijnPieters,您正在查看的示例数据实际上是 Python dict 而不是 json str。看看@falsetru 的回答,结果你没有L
  • 我同意这是一个文字,但结果实际上不适用于与另一个不需要 python 文字的系统进行交换,并且可以处理这样的长格式。
  • @user1886721:Python 表示字符串不意味着用于与其他系统的交换。 json.dumps()用于数据交换)的结果包含它。

标签: python json long-integer


【解决方案1】:

json.dumps 不附加尾随 L

>>> json.dumps({'status': 'default', 'ID': '7717', 'recordTimestamp': 1372651201000L, 'Latitude': 50.836689, 'Longitude': -53.879143})
'{"status": "default", "Latitude": 50.836689, "Longitude": -53.879143, "ID": "7717", "recordTimestamp": 1372651201000}'

>>> json.dumps(98765432109876543210L)
'98765432109876543210'

【讨论】:

  • 这实际上不是有效的 JSON(python 的 JSON 解析器不符合标准)——顶级对象必须是地图或数组,FWIW,但你的观点仍然成立。
  • @DanLecocq 怎么会这样?输出是一个 JSON str 并且这个字符串的内容的顶层确实是一个数组/映射,不是吗?
  • 我的意思是json.dumps(98765432109876543210L),但是第一个实例很好:-) 很抱歉造成混乱
【解决方案2】:

你可以使用str()函数:

str(longInt)

删除结尾的L

【讨论】:

    【解决方案3】:

    查看 json 文档: 专门的 JSON 对象编码:

    >>> import json
    >>> def encode_complex(obj):
    ...     if isinstance(obj, complex):
    ...         return [obj.real, obj.imag]
    ...     raise TypeError(repr(o) + " is not JSON serializable")
    ...
    >>> json.dumps(2 + 1j, default=encode_complex)
    '[2.0, 1.0]'
    >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
    '[2.0, 1.0]'
    >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
    '[2.0, 1.0]'
    

    所以你可以定义你的 encode_complex 方法,用 intlong 类型做一些事情。

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2011-02-23
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多