簡體   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