我正在尝试将 JSON 字符串作为命令行参数从 Javascript 作为 node.js 子进程传递给 C# .exe。为了便于论证,我的 JSON 看起来像这样:
string jsonString = '{"name":"Tim"}'
将其作为 C# 参数传递的问题是,如果我希望在 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() 参数包含在单引号 '' 而不是双引号 ""内的变体,但没有成功。
谁能告诉我我做错了什么?更好的是,任何人都可以建议一种更有效的方法来实现我想要实现的目标吗?
最佳答案
除非我误读了你,否则我认为你只是想转义一个不需要在正则表达式中转义的字符(“)。
var jsonString = '{"name":"Tim"}'
var escaped = jsonString.replace(/"/g, '\\"');
// escaped == "{\"name\":\"Tim\"}"
关于字符 "with the characters\"的 Javascript .replace(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084099/