Javascript 应用程序脚本中出现意外映射结果

Javascript 应用程序脚本中出现意外映射结果,javascript,google-apps-script,Javascript,Google Apps Script,我正在使用应用程序脚本并拥有: var json = UrlFetchApp.fetch(url); var objArray = JSON.parse(json) Logger.log(objArray); const indices = objArray.map(({ ' #':id }) => id); Logger.log(indices); Logger.log(objArray)提供: Logger.log(索引)给出: 然而,以下方面: const values

我正在使用应用程序脚本并拥有:

var json = UrlFetchApp.fetch(url);
var objArray = JSON.parse(json) 
Logger.log(objArray);    
const indices = objArray.map(({ ' #':id }) => id);
Logger.log(indices);
Logger.log(objArray)提供:

Logger.log(索引)给出:

然而,以下方面:

const values = [
 { " #": "4596", " E": "Yes"},
 { " #": "4597", " E": "No"},
 { " #": "4598", " E": "Maybe"},
]

在应用程序中运行时,脚本生成:

[4596,4597,4598]
为什么第一个不起作用

编辑:

json:

这个答案怎么样

问题和解决方法: 从你回复的URL,我可以理解你问题的原因。从
URL检索值时https://ssjbhokibi.execute-api.us-east-1.amazonaws.com/dev/hello/get
,我可以确认与示例输入值类似的值,也可以确认相同的情况。当我检查字符时,我可以确认
#
不是
0020
的空格,而是
00A0
,它是不间断空格。我想这就是你的问题所在

而且,
UrlFetchApp.fetch(url)
检索到的值是HTTPResponse类的对象。因此,在此修改中,
getContentText()
用于检索文本值

为了消除您的问题,下面的修改如何

模式1: 在此模式中,通过将
0020
回复到
00A0
来修改脚本

发件人: 致:
  • 当我直接使用
    00A0
    “#”
    发布上述修改后的脚本时,似乎
    00A0
    会通过标记的呈现自动更改为
    0020
    。因此,在本例中,当您直接看到我的答案的来源时,您可以使用
    00A0
  • 但在这种情况下,我认为修改后的脚本的可读性可能很低。因此,我想提出另一种模式,如下所示
模式2: 在此模式中,通过使用
String.fromCharCode(160)
转换
00A0
来创建键,并检索值

发件人: 致: 或

注:
  • 在示例输入值中,
    0020
    用于
    #
    。所以我没注意到这一点。但是当我用
    00A0
    更新我的答案时,我注意到
    00A0
    会自动更改为
    0020
    。另一方面,我可以通过单击编辑按钮确认源代码时,
    “#”
    使用
    00A0
    。而且,当我确认你的问题来源时,可以确认
    [{“#”:“4626”的空格,
    使用
    00A0
    。当我测试它来呈现标记时,我注意到当标记的呈现运行时,
    00A0
    似乎被更改为
    0020
    ,即使是在脚本中编写的。这样,我无法从您添加的示例输入值中注意到这个问题。在这种情况下,我认为之前发布的相同问题可能也有相同的情况,这可能是重要的一点
参考资料:

您能否提供
var json=UrlFetchApp.fetch(url)的
json
的示例值
在使用
JSON.parse
之前?感谢您添加信息。虽然这是我的猜测,但我还是提出了一个修改点作为答案。您能确认一下吗?我想在您的附加示例值中,当
objArray
[{{code>:“4626”,,},{{code>:“4623”,][/code>,
objArray.map({'.'''''':id}=>id);
返回
[46264623]
。因此,如果下面的修改不是直接的解决方案,那么作为下一步,您能否提供
var value=JSON.stringify(JSON.parse(JSON.getContentText())
)的
value
的示例值
如果键的间距与原始值不同,例如,当
objArray
的键为
'
'
'.
时,测试
常量索引=objArray.map({'.'id1'.'id2'.'id3}=>id1.'id2'.'id3})如何
?不幸的是,关于这一点,我不确定这是否与您的问题直接相关。很抱歉。我非常确定HTTPResponse将在json.parse上自动转换为字符串。此外,在解析后的日志中,存在keys=value格式。
[{#=4626,E=Yes,Assd$=,
。错误可能是在解析之后。但我可能错了,让我们看看op是怎么说的。@感谢您的回答。是的。我非常同意您的意见。因此我建议将其作为我的猜测。例如,如果
常量索引=objArray.map(({#':id1,#':id2,#':id3})=>id1 | id2 | id3)
null
是同一个问题,我想再次确认
var json=urlfetchap.fetch(url);
。@从OP提供的url,我可以知道问题的原因和一个要点。发现问题是
'.
的空间是
00A0
(不间断空间)它不是
0020
(空格)。而且,作为一个重要的一点,我们发现,当降价源被呈现时,
00A0
会自动替换为
0020
。因此,当检查源代码时,它可以确认源代码中使用了
00A0
。我认为这是延迟理解该问题的原因之一。@或者回复。是的。当看到降价的呈现结果时,
00A0
似乎会自动替换为
0020
。这样,我无法很快注意到这一点。但是,当您通过单击“编辑”按钮看到OP的问题和我的答案的降价来源时,您可以确认
[{”#“:“4626”的空格
是OP的附加值,我的答案的模式1是
00A0
。你可以通过复制和粘贴来检查
A0
。这是对我来说新的重要信息。很高兴知道。谢谢。我通常
const values = [
 { " #": "4596", " E": "Yes"},
 { " #": "4597", " E": "No"},
 { " #": "4598", " E": "Maybe"},
 const indices = values.map(({ " #" : id }) => id);

 console.log(indices);
[4596,4597,4598]
 [{" #":"4626"," E":"Yes"," Date":"06/15/20"," County":"St. Martin Parish"," State":"Louisiana"," Acres":"15.00","  Eager":"High"},{" #":"4623"," E":"Yes"," Date":"06/15/20"," County":"Greenville County"," State":"South Carolina"," Acres":"1.50","Eager":"Low"},
var json = UrlFetchApp.fetch(url);
var objArray = JSON.parse(json) 
const indices = objArray.map(({ ' #':id }) => id);
var json = UrlFetchApp.fetch(url);
var objArray = JSON.parse(json.getContentText());
const indices = objArray.map(({ ' #':id }) => id);
var json = UrlFetchApp.fetch(url);
var objArray = JSON.parse(json) 
const indices = objArray.map(({ ' #':id }) => id);
var json = UrlFetchApp.fetch(url);
var objArray = JSON.parse(json.getContentText());
const indices = objArray.map(({[String.fromCharCode(160) + "#"]: id}) => id);
var json = UrlFetchApp.fetch(url);
var objArray = JSON.parse(json.getContentText());
const indices = objArray.map(e => e[String.fromCharCode(160) + "#"]);