Javascript JSON.parse正在输出字符串

Javascript JSON.parse正在输出字符串,javascript,json,Javascript,Json,这是怎么回事 var data = '"[2743,1,1,1,1,1]"'; var flags = JSON.parse(data); console.log(typeof flags); // this outputs "string" 我希望标志是一个对象或数组,但它是一个字符串。比如,“JSON.parse()方法解析JSON字符串,构造字符串所描述的JavaScript值或对象。”另外: 返回值 与给定JSON文本对应的对象 例外情况 如果要分析的字符串不是有效的JSON

这是怎么回事

var data = '"[2743,1,1,1,1,1]"';
var flags = JSON.parse(data);
console.log(typeof flags);      // this outputs "string"
我希望
标志
是一个对象或数组,但它是一个字符串。比如,“JSON.parse()方法解析JSON字符串,构造字符串所描述的JavaScript值或对象。”另外:

返回值
与给定JSON文本对应的对象

例外情况
如果要分析的字符串不是有效的JSON,则引发SyntaxError异常


看起来它是一个对象,一切正常,请检查代码段:

var数据='[2743,1,1,1,1];
var flags=JSON.parse(数据);
控制台日志(标志类型);
控制台日志(标志)
这是一个包含字符串的字符串。当你用

var result = JSON.parse(data);
你得到的是绳子

"[2743,1,1,1,1,1]"
如果您第二次解析它,您将得到您的标志数组

试试这个

var flags = JSON.parse(JSON.parse(data));

不可复制的张贴<代码>标记类型
为“对象”。是的,对不起,我弄错了。在我的真实代码中,
data
实际上是
“[2743,1,1,1,1,1]”
-
data
是由对PHP脚本的Ajax调用的返回值设置的,PHP的
json_encode()
函数似乎是在字符串的末尾添加引号(因此为
json.parse(data)
键入“string”是正确的).我已经编辑了您的问题,以实际使用您的数据。@osulical
。。。返回两端嵌入引号的字符串。在JSON.parse(data)
No之前,我必须先在JavaScript中去掉这些引号,这些引号不应该出现在响应中。检查您在服务器上传递给
json\u encode()
的数据,并修复它!(可能是因为您
json_encode()
值重复了两次吗?)不要尝试修补前端服务器的错误响应。修复响应。@Thomas您的怀疑是正确的-我还必须处理其他错误,但最终,促使我问这个问题的问题是由于我的服务器端代码在输出之前对已经json编码的数组(即字符串)调用了
json_encode()
。您是对的。事实上,我在上面发布的是我的代码的简化版本,它实际上通过返回jQuery/Ajax调用来设置
数据。PHP的
json_encode()
函数(位于Ajax调用的另一端)似乎正在返回一个两端都嵌入了引号的字符串。在JSON之前,我必须先在JavaScript中去掉这些内容。
JSON.parse(data)
做了我希望它做的事情。@osulical,这个问题比我认为的更复杂=)很高兴听到这个消息,你知道,问题在哪里
var flags = JSON.parse(JSON.parse(data));