【发布时间】:2015-03-16 18:15:56
【问题描述】:
我正在尝试将 JSON 字符串作为命令行参数从 Javascript 作为 node.js 子进程传递给 C# .exe。为了论证,我的 JSON 看起来像这样:
string jsonString = '{"name":"Tim"}'
将 this 作为 C# arg 传递的问题是,如果我希望在 C# 代码中解析它,则必须保留双引号。因此,我需要传递到 C# 命令行的内容看起来像这样,我在其中转义了双引号:
string jsonStringEscaped = '{\"name\":\"Tim\"}'
这样做的动机是它允许我在两种语言中保持一致的对象结构,这显然对我来说是非常可取的。
为了实现这一点,我尝试在将参数发送到 C# 之前使用 Javascript .replace() 方法,为此我使用了一个简单的正则表达式:
string jsonStringEscaped = jsonString.replace(/\"/g,"\\\"")
不幸的是,这会返回 '{\\"name\\":\\"Tim\\"}' 形式的东西,这对我来说毫无用处。
我已经尝试过这方面的变化:
string jsonStringEscaped = jsonString.replace(/\"/g,"\\ \"")
\\ returns '{\\ "name\\ ":\\ "Tim\\ "}'
string jsonStringEscaped = jsonString.replace(/\"/g,"\\\\")
\\ returns '{\\\\name\\\\:\\\\Tim\\\\}'
string jsonStringEscaped = jsonString.replace(/\"/g,"\\\")
\\ is invalid
string jsonStringEscaped = jsonString.replace(/\"/g,"\\\ ")
\\ returns '{\\ name\\ :\\ Tim\\ }'
我尝试过将第二个 .replace() 参数包含在单引号 '' 而不是双引号 "" 中的变体,但没有成功。
谁能告诉我我做错了什么?更好的是,任何人都可以提出一种更有效的方法来完成我想要实现的目标吗?
【问题讨论】:
-
从命令行启动 c# 应用程序所需的结构是什么?听起来好像您正在尝试临时服务而没有任何服务的好处。
-
你确定你对结果的解释是正确的,并且'\\'不只是'\'的显示形式吗?您的替换代码似乎正是您所需要的。
-
@Frax 非常感谢,我认为这就是原因。我花了很多时间来调试这个微不足道的问题。
标签: javascript c# json