情况:
我在获取 JSON 文件中的用户名字符串以解析为具有正确值的 Javascript 对象时遇到困难。这是一个 grunt 任务,因此它使用 JSON.parse()
的 node.js 实现.
我们有一个 FTP 用户名(由 azure 提供,不可更改),格式为 "domain\$username"
。我们需要一个 Grunt 任务以该格式提供此用户名以进行 FTP 推送。
我们尝试过的:
我已经启动了一个 Node 实例,并运行了不同级别的反斜杠转义的一些排列,以了解如何处理这个问题。
(格式:Input
=> Parse Result
)
-
{ "user": "domain\$username" }
=>{ user: 'domain$username' }
(似乎\转义了 $) -
{ "user": "domain\\$username" }
=>Unexpected token $
(所以看起来 $ 需要转义) -
{ "user": "domain\\\$username" }
=>Unexpected token $
(什么?!?) -
{ "user": "domain\\\\$username" }
=>{ user: 'domain\\$username' }
(所以反斜杠被转义了,现在 $ 不需要转义了?) -
{ "user": "domain\\\\\$username" }
=>{user: 'domain\\$username' }
(欢迎来到疯狂镇。)
问题:
我们如何格式化 JSON 文件中的用户名,以便 Node.js 的解析器输出 domain\$username
?
最佳答案
所以让我们进行健全性检查
> var username = 'domain\\$username'; console.log(username);
> domain\$username
嗯...
> var config = { user: 'domain\\$username' }; console.log(config.user);
> domain\$username
好吧-所以两个斜线应该是票证?但这给我们带来了意外的 token $
错误。
所以让我们尝试用另一种方式来解决它 - 使用 JSON.stringify。
> var input = JSON.stringify({user:'domain\\$username'}); console.log(input);
> {"user":"domain\\$username"}
> var output = JSON.parse(input); console.log(output.user);
> domain\$username
但是等一下...
> input
> '{"user":"domain\\\\$username"}'
> output.user
> 'domain\\$username'
所以 console.log
实际上返回的是转义的结果,而不是原始值,而仅仅评估变量就会给你原始值(我想如果你仔细想想,这是有道理的) 。
所以答案是使用四个斜杠。
关于json - 解析包含 $ 的 JSON 文件会导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32184480/