【问题标题】:Coldfusion 8 truncates number in JSON string but ColdFusion 10 does notColdFusion 8 会截断 JSON 字符串中的数字,但 ColdFusion 10 不会
【发布时间】:2015-04-07 21:05:36
【问题描述】:

这个字符串:

{"status":"ok","payload":{"total pages":1,"page":1,"total entities":1,"queryId":"1e93eb52-7421-4706-8eb9-f41f8ce7ff06","entities":[{"Entity ID":694000000269197}]}}

在 CF10 中通过 deserializeJson 运行时会产生您所期望的结果,但在 CF8 中,entities[1]['Entity ID'] 会产生 6.94000000269E+014

发生了什么,我怎样才能让它返回实数。

【问题讨论】:

    标签: json coldfusion deserialization coldfusion-8


    【解决方案1】:

    我使用 CFLIB http://www.cflib.org/udf/jsondecode 函数而不是 CF8s deserializeJSON 函数,假设它只是在阅读这篇文章后解析数据错误:Coldfusion SerializeJSON and deSerializeJSON is converting a string to number

    【讨论】:

    • 这是一个不同的问题。您的“实体 ID”是数字,而不是字符串。貌似the numeric value is the same,只有CF8用科学计数法显示,CF10.不是。如果把entities[1]['Entity ID'].getClass().name这个类名dump出来,结果是什么?
    • 我尝试使用内置反序列化函数的结果,但其中包含符号,而不是实际值。我不知道如何将其变为实数。使用 CFLIB 函数对我有用。至于这一切的原因,我不知道。我知道 CF8 很旧,但我必须为客户转换一些东西,所以我来了。
    • 明白,但是如果您查看上面的链接,它会解释为什么某些数字对象可能会以科学计数法显示。但是,这并不意味着基础数字不同。该链接引用 BigDecimal 值,但类似的问题也适用于其他数字类型。我怀疑这可以解释你的情况的不同之处。顺便说一句,使用该功能没有错。只是好奇原因..
    • 它不只是显示它。我使用该值并在另一个 API 调用中将其传回,我收到一个错误,即系统中不存在该 ID。没有意义。
    • 一切都取决于传递的内容及其解释方式。很难在没有看到代码的情况下做更多的猜测。顺便说一句,我认为您从未回答过前面的问题。当你在 CF8 + 10:entities[1]['Entity ID'].getClass().name 上转储类名时,你会得到什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2018-04-08
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多