【问题标题】:In JavaScript, is there a way of parsing JSON that turns numbers into strings?在 JavaScript 中,有没有一种方法可以解析 JSON 将数字转换为字符串?
【发布时间】:2012-08-16 12:05:55
【问题描述】:

由于 JavaScript 对所有数字都使用浮点数学运算,这不会在所有情况下都保持精度,因此我想解析一个包含数字的 JSON 对象,但在返回的 JavaScript 对象而不是数字对象中生成字符串。有没有办法使用标准库或第三方库来做到这一点?

【问题讨论】:

  • 我真的怀疑任何常用的库都会这样做。您最好首先生成带有数字作为字符串的 JSON。
  • 正如你所建议的,“我想解析......”。我认为您需要在导入之前操作 JSON string 并制作数值字符串 - 也许使用正则表达式?
  • @w3d 操作字符串是可能的,但由于字符串中可能已经嵌入了数字字符串,因此它可能几乎与直接解析 JSON 一样困难。 JavaScript JSON 解析器的源代码是可用的,而且我怀疑它很容易修改,因为解析器无论如何都必须以字符串形式收集数字常量。
  • 仅供参考...当可选的第四个参数设置为 JSON_BIGINT_AS_STRING 时,PHP 的 json_decode() 函数允许您执行此操作。

标签: javascript json floating-point


【解决方案1】:

你可以做这样的事情。这可能不是一个完美的解决方案(尤其是 reg 表达式),但希望它能帮助您解决这个问题。

var json = '{"num1":123.89075576575775676575, "num2":89.5564764646476444844, "num3":56.4353454354353535435435435}';

json = json.replace(/\d+.\d+/g, function(a, b){ 
    return '\"' + a + '\"';
});

console.log($.parseJSON(json )); // I have used jQuery. Any JSON parser can be used

【讨论】:

  • 不幸的是,这也会转义字符串中的数字。
  • 可以通过修改reg表达式来避免。
【解决方案2】:

你可以试试正则表达式,比如:

 var numstrings = JSON.parse(json.replace(/\:([0-9.]+)(,?)/g,':\"$1\"$2'));

http://jsfiddle.net/rmwcZ/

【讨论】:

  • 如果他调用JSON.parse,那么在你的函数调用之前,JSON 表示中无法准确表示的数字将被破坏。
  • 对,用正则表达式做了一个例子。
  • 不幸的是,这也会转义字符串中的数字。
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多