【发布时间】:2015-08-24 14:11:58
【问题描述】:
情况:
我在获取 JSON 文件中的用户名字符串以解析为具有正确值的 Javascript 对象时遇到了困难。这是在一个 grunt 任务中,所以它使用了 JSON.parse() 的 node.js 实现。
我们有一个格式为 "domain\$username" 的 FTP 用户名(由 azure 提供,不可更改)。我们需要一个 Grunt 任务以该格式为 FTP 推送提供此用户名。
我们的尝试:
我已经启动了一个节点实例并运行了一些不同级别的反斜杠转义的排列,以了解如何处理这个问题。
(格式: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?
【问题讨论】:
-
使用 3 个反斜杠对我来说效果很好:
console.log(JSON.parse(JSON.stringify({user: "domain\\\$username"})).user)输出:domain\$username -
这很奇怪,也许你可以发送一个特殊的字符链,当你得到 json 时将其替换为'$'。像“theMoneyCharacter”这样的东西。如果您需要快速回答,因为这是在浪费程序时间。 3 '\' 应该可以正常工作。
-
据我所知 $ 不需要转义,但 \ 确实应该是两个反斜杠 \\$
-
你们是在浏览器窗口还是在节点实例中执行这些操作?
-
如果您手动创建字符串,则需要将反斜杠转义两次。
domain\\\\$username这导致:domain\\$username在 json 字符串中,然后当它被解析为 JSON -> 对象时,它变成"domain\$username"并且,浏览器给出了你在节点环境中遇到的所有相同问题在这种情况下。