【问题标题】:JSON parse Number as StringJSON 将数字解析为字符串
【发布时间】:2020-03-25 20:27:59
【问题描述】:

在javascript中将JSON数字解析为字符串的最佳方法是什么

Example:
{
  "a": 10.00
}

通知 我无法控制价值 10.00。 我不能在那里添加“+''”。 我想保留小数位,但不规定必须有 2 位小数。

结果应该是 10.00 而不是 10

【问题讨论】:

  • JSON.parse 就可以了。 1010.00 的实际数字表示完全相同。如果你想以某种方式显示/格式化数字,那么你可以使用.toFixed:(10)..toFixed(2)。如果您想准确地显示数字在 JSON 文档中的书写方式,那么您就不走运了。该值必须作为字符串提供。
  • 你需要 "a" 作为字符串 "10.00" 吗?
  • 看看你的问题:不,你没有。您希望在某个时刻向用户显示该值,小数点后有 2 位小数。根据 Felix 的评论,请改为这样做。使用 JSON.parse,将其设为数字​​ 10,然后仅在需要显示的时候进行格式化。
  • 是的,你使用 .toFixed(2) 来完成,你根本不需要改变输入,你只需要使用 <p class="amount">${{ parsed.a.toFixed(2) }}</p> 或者任何你的渲染引擎的等价物是。
  • 那么您将不得不接受 Javacript 看不到 10 和 10.00 之间的差异这一事实:它们在运行时实际上是相同的值。如果你需要它是字符串,那么要么发送带有引号的 json 值(例如 "10.00" 而不是 10.00"1.928346"、不是 1.928346 等)但如果你不能这样做,那么你不走运:编写代码检查是否有小数,如果有,直接使用数字,如果没有,如果您总是想查看最小小数位数,请使用 toFixed(...)地方。

标签: javascript json parsing


【解决方案1】:

如果您需要完全相同的小数位数,唯一的方法是 JSON 将值显示为字符串。如果您无法控制源,则可以在解析之前编辑 JSON,添加引号,但这可能会带来一些问题。这需要彻底测试。

json = '{ "a": 10.00, "b":2.1020, "d":0.20,"c": "21" }';

json = json.replace(/:\s*[^"0-9.]*([0-9.]+)/g, ':"$1"');

console.log(json);
console.log(JSON.parse(json));

【讨论】:

  • 只是强调一下,这需要彻底测试注意是非常重要的,如果你使用这种方法,记得添加测试,因为它可以只是很容易完全破坏代码的其他部分。
【解决方案2】:

在解析JSON字符串并将字符串10.00转换为数字10之前,可以使用正则表达式提取a属性的值:

const jsonString = `{
  "a": 10.00
}`
const aString = jsonString.match(/[,{]\s*\"a\":\s*([0-9.]+)/m)[1]
console.log(aString)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    相关资源
    最近更新 更多