Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将JSON字符串作为参数传递?_Javascript_Json - Fatal编程技术网

Javascript 如何将JSON字符串作为参数传递?

Javascript 如何将JSON字符串作为参数传递?,javascript,json,Javascript,Json,假设我有一个相当简单的方法,如下所示: var foo = function (str) { console.log(str); //{"Field Name": "Value With "Escaped" Content"} JSON.parse(str); //fails } foo('{"Field Name": "Value With \"Escaped\" Content"}'); 传递的参数具有有意的反斜杠(字符串来自第三方),但是,一旦字符串传递给函数,它们就

假设我有一个相当简单的方法,如下所示:

var foo = function (str) {
    console.log(str); //{"Field Name": "Value With "Escaped" Content"}
    JSON.parse(str); //fails
} 

foo('{"Field Name": "Value With \"Escaped\" Content"}');
传递的参数具有有意的反斜杠(字符串来自第三方),但是,一旦字符串传递给函数,它们就不存在了(请参阅内联注释)


我是否可以在不手动双重转义字符串的情况下避免该问题?为什么在字符串周围使用单斜杠不能避免这个问题?是否可以检索原始输入字符串?

字符是JSON转义字符,但也是JavaScript转义字符

您有一个JavaScript字符串文本。当JavaScript编译器对其进行解析时,
\“
将被解释为

因此,JSON解析器被传递到
,而不是
\”

我是否可以在不手动双重转义字符串的情况下避免该问题

字符串需要双重转义。根据字符串的来源,您可能需要手动执行此操作,也可能不需要手动执行此操作

为什么在字符串周围使用单斜杠不能避免这个问题


因为JavaScript的语言设计没有说
\
字符不是单引号字符串中的转义字符。

您转义
,因为在此上下文中您声明的是一个字符串(顺便说一句,没有用,因为被简单引号包围),您不是在创建转义双引号可能的副本,您只是将此JSON复制并粘贴到源代码中进行测试,但实际上该字符串将来自某个API?那么您在实践中甚至不会遇到此问题!否则,请澄清该字符串来自何处以及如何使用它。@deceze该函数称为wi对于由第三方脚本内联的参数,我可以简单地修改接收函数。然后我认为您大部分都被搞糟了。是否可以在不进行解析的情况下检索原始输入字符串?@Nit linked post state
string.raw
es6仅通过访问原始JavaScript并编写自定义解析器。(这将是一个愚蠢的解决问题的方法)。@Nit在您将其输入源代码的第二刻(好的,只要它被计算)它就被“解析”。Javascript源代码中的字符串
“foo\”bar
实际上意味着
foo“bar
@deceze我理解,但我想知道是否仍然可以访问它,看起来像
字符串。raw
回答了这个问题,但这是ES6。