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