繁体   English   中英

Apps Script JSON.parse()是否从字符串对象名称中错误地去除了前导零?

[英]Is Apps Script JSON.parse() incorrectly stripping leading zeros from string object names?

我有一个可获取JSON数据的Apps脚本Web应用程序。 我在调用JSON.parse()时遇到了修改带有前导零的键(例如,“ 0123”变为“ 123”)的问题。 在我看来,该函数将我的字符串视为整数,但仍将其作为字符串返回。 这是预期的行为吗?

这应该重现我的问题:

function jsontest() {
  var json = '{"0123":"foo", "bar":"0123", "foobar":123}';
  var test = JSON.parse(json);
  var check = ("0123" in test);
  var check2 = ("123" in test);

  Logger.log(test);
  Logger.log(JSON.stringify(test));
  Logger.log(check);
  Logger.log(check2);
}

它在日志中产生此:

[17-06-07 15:22:56:241 CDT] {123=foo, bar=0123, foobar=123}
[17-06-07 15:22:56:241 CDT] {"123":"foo","bar":"0123","foobar":123}
[17-06-07 15:22:56:242 CDT] false
[17-06-07 15:22:56:243 CDT] true

在Google Apps脚本中, JSON.parse()删除单引号和双引号。 此时,如果键中包含数字,则将键更改为数字。 因此,键的“ 0123”更改为数字“ 123”。 作为避免这种情况的方法,可以使用eval() 通过使用eval() ,可以删除单引号和双引号,而无需将字符串转换为数字。

我不知道这是否是最好的方法。 因此,请仅将此作为一个提案。

样品:

var json = '{"0123":"foo", "bar":"0123", "foobar":123}';

var test1 = JSON.parse(json);
var test2 = eval("json=" + json);

Logger.log("%s, %s", test1, JSON.stringify(test1));
Logger.log("%s, %s", test2, JSON.stringify(test2));

结果:

{123=foo, bar=0123, foobar=123}, {"123":"foo","bar":"0123","foobar":123}
{bar=0123, foobar=123.0, 0123=foo}, {"0123":"foo","bar":"0123","foobar":123}

当以上示例用于您的脚本时,修改后的脚本如下。

修改后的脚本:

function jsontest() {
  var json = '{"0123":"foo", "bar":"0123", "foobar":123}';

  var test = eval("json=" + json); // <-- Added
//  var test = JSON.parse(json);

  var check = ("0123" in test);
  var check2 = ("123" in test);

  Logger.log(test);
  Logger.log(JSON.stringify(test));
  Logger.log(check);
  Logger.log(check2);
}

结果:

{bar=0123, foobar=123.0, 0123=foo}
{"0123":"foo","bar":"0123","foobar":123}
true
false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM