【问题标题】:how it's possible that JSONObject put (String name, long value) can store int64 value in json?JSONObject put (String name, long value) 怎么可能将 int64 值存储在 json 中?
【发布时间】:2017-07-12 10:43:45
【问题描述】:

我不明白JSONObject put (String name, long value) 如何工作,因为实际上 json 只允许将浮点值存储在 8 位上。当然我们可以存储大数字,但是数字越大,json中存储的值就越不准确。例如,不可能将这个精确值存储在 8 位浮点数中:18,446,744,073,709,551,614,当我们尝试检索该值时,我们将收到类似 18,446,744,073,700,000,000 的值

所以我很好奇,JSONObject 到底放了什么(字符串名称,长值)?

【问题讨论】:

    标签: java android json


    【解决方案1】:

    你的假设是错误的。 JSON 中数字的长度不受限制。限制存在于不同的实现中。例如,称为 javascript 的 abominatin 仅限于浮点数(没有整数的编程语言,真是个好主意!)Android 中的 JSONObject 在存储和检索长整数值时没有问题。

    【讨论】:

    • 好的,我理解,但不完全,因为在 json 文本文件中,它们没有标志来说明值是浮点数、整数还是 int64。例如 1234 可以是所有这些。那么,当您将 json 保存到文件并稍后再次加载时,它是如何工作的呢?
    • 同样,这取决于实施。 Android JSONObject 实现只是首先尝试将值解析为整数类型(如果足够小,则为 long 或 int),如果失败则尝试将 value 解析为 double,如果也失败则将 value 视为不带引号的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多