[英]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.