【问题标题】:json stringify failing when value is without double quotes当值没有双引号时,json stringify 失败
【发布时间】:2015-11-17 17:29:07
【问题描述】:

当我尝试将下面的 json 转换为字符串时,当值没有用双引号引起来时,会得到意想不到的输出:

JSON 数据:

[
{
    "Name": "param1",
    "Type": "Integer",
    "Default Value": 8778
},
{
    "Name": "param2",
    "Type": "Float",
    "Default Value": 1.4
},
{
    "Name": "param3",
    "Type": "String",
    "Default Value": true
},
{
    "Name": "param4",
    "Type": "String",
    "Default Value": "test"
}
]

当前结果:

[{"Name":"param1","Type":"Integer","Default Value":8778},  {"Name":"param2","Type":"Float","Default Value":**1.4**}, {"Name":"param3","Type":"String","Default Value":**true**}, {"Name":"param4","Type":"String","Default Value":**"test"**}]

预期结果:

[{"Name":"param1","Type":"Integer","Default Value":**"8778"**},  {"Name":"param2","Type":"Float","Default Value":**"1.4"**}, {"Name":"param3","Type":"String","Default Value":**"true"**}, {"Name":"param4","Type":"String","Default Value":**"test"**}]

我尝试了以下代码:但它不起作用。

  jsondata = JSON.stringify(confTableData);          
  jsondata = jsondata.replace(/:(\d+|\d*\.\d+)([,\}])/g, ':"$1"$2'); // only Integer & Float type values replaced         
  jsondata = jsondata.replace(/:(.)([,\}])/g, ':"$1"$2'); It gives strange result.            

任何人都可以帮助我使用正则表达式模式来满足我的要求。

【问题讨论】:

  • 你想在这里做什么,JSON 不需要数字引号,它正在做它应该做的事情?
  • 您为什么希望将数字更改为字符串?
  • 也许,您需要在第一个和第二个正则表达式中允许空格?此外,您可以仅使用 -?\d*\.?\d+ 匹配整数和浮点数。
  • 如果要将数字更改为字符串,只需将整数和浮点数括起来即可。但我不知道你到底期待什么。
  • 不要使用正则表达式操作 JSON 字符串。另外,考虑更改问题标题。我猜你的意思是“JSON.stringify:将数字和布尔值转换为字符串”。

标签: javascript json regex


【解决方案1】:

JSON 规范概述了您所看到的标准行为,我建议您将数字作为数字而不是字符串进行操作。

如果由于某种原因需要修改,可以使用JSON.stringify spec中所示的“替换器”功能。

var numbersAsStringsJSON = JSON.stringify(myData, replacer);

function replacer(key, value) {
  if (typeof value === "number") { return String(value); }
  else { return value; }
}

有关工作示例,请参阅 JSFiddle

【讨论】:

  • 我猜你也应该将布尔值转换为字符串。
  • 你是个好人。我正在尝试使用正则表达式来查找模式..这简化了我半天的工作.. :)
  • 是的,您可以转换任何传递的数据,或删除值等。
【解决方案2】:

数字不需要用双引号括起来。查看json.org 上的一些示例。

如果您希望数字是 JSON 中的字符串,您可以在对对象进行字符串化之前将它们设为字符串,例如:

var data = {
  "Name": "param1",
  "Type": "Integer",
  "Default Value": 8778
};
data["Default Value"] = String(data["Default Value"]);

var json = JSON.stringify(data); 

如果您在对 JSON 进行字符串化之前执行此操作,则无需对其运行正则表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多