Javascript 将字符串解析为JSON,在key和keyvalue上使用单引号

Javascript 将字符串解析为JSON,在key和keyvalue上使用单引号,javascript,json,Javascript,Json,我的服务器响应类似于上面的字符串。无法解析为JSON。它作为示例文本。在分析时,我得到如下错误: var str = "{'a':'Your's'}"; JSON.parse(str); 有人已经提出了同样的问题。点击查看。但是,没有帮助。请帮忙。提前感谢。TL;DR JSON只支持双引号。 如果可能,请修复服务器上的错误 JSON需要双引号,因此单引号不符合标准。可能有解析器支持它们,但你永远不能依赖它。有关JSON语法的更多详细信息,请参阅 除此之外,输入字符串{'a':'Your's};

我的服务器响应类似于上面的字符串。无法解析为JSON。它作为示例文本。在分析时,我得到如下错误:

var str = "{'a':'Your's'}";
JSON.parse(str);
有人已经提出了同样的问题。点击查看。但是,没有帮助。请帮忙。提前感谢。

TL;DR JSON只支持双引号。 如果可能,请修复服务器上的错误

JSON需要双引号,因此单引号不符合标准。可能有解析器支持它们,但你永远不能依赖它。有关JSON语法的更多详细信息,请参阅

除此之外,输入字符串{'a':'Your's};如果单引号有效,则其本身完全无效。'在您的中'是打断字符串文字,下面的s在字符串外部,下一个'是打开一个字符串,其中包含},但从未被另一个关闭'

正确的语法应该是“{a:Your's}”。 如果您收到该字符串,并且无法更正服务器输出,则可以尝试将“all”替换为,但在有效负载字符串中使用单引号会出现问题。到目前为止,这是最简单也是最稳定的修复程序应该更正服务器输出,而不是更正客户端上的缺陷输出

首先,在客户机上使用以下代码进行转换可能是一个好主意,但会损坏带有单引号的有效负载字符串

JSON.parse(str);
VM1951:1 Uncaught SyntaxError: Unexpected token ' in JSON at position 1(…)(anonymous function) @ VM1950:1
如果可以确定,负载外没有空格字符,也没有换行符,那么可以使用以下函数。而且,如果您确定,搜索模式不在有效负载字符串中

replaceInString = function(fullString, search, replacement) {
    return fullString.split(search).join(replacement);
};

var json = replaceInString("{'a':'Your's'}", "'", '"');
但是使用此代码,例如,JSON字符串后面的JSON`将被损坏

var json = "{'a':'Your's'}";

replaceInString = function(fullString, search, replacement) {
    return fullString.split(search).join(replacement);
};

json = replaceInString(json, "{'", '{"');
json = replaceInString(json, "'}", '"}');
json = replaceInString(json, "':", '":');
json = replaceInString(json, ":'", ':"');
json = replaceInString(json, "',", '",');
json = replaceInString(json, ",'", ',"');
json = replaceInString(json, "['", '["');
json = replaceInString(json, "']", '"]');

需要明确的是:这样的代码可以帮助您克服开发、测试或学习过程中的困难。但这不是一个持久的解决方案。在投入生产之前,请联系服务器开发人员修复其实现并删除客户端修复。

JSON键和值必须用双引号括起来,而不是单引号'

这是正确的:

{'mathTerm':'x=1-[2+A']'}

您的输入字符串不是有效的JSON。在你解析它之前先处理它。它还准确地告诉你问题是什么,你在字符串的末尾加上了r和之间的撇号s@MauricePerry我只是将JSON对象转换为JSON stringfy并存储在服务器上。存储在服务器上后,JSON字符串作为above@Nisar你说存储在服务器上是什么意思?@MauricePerry我只是将类似于{a:Your's}的JSON对象发送到服务器。从服务器得到的响应是{'a':'Your's}。完全正确。在服务器上存储时,字符串为{a:Your's}。从服务器得到的响应是{'a':'Your's}。谢谢,您的答案是正确的。同时,正如你提到的那样,这将是腐败的谢谢你的回答,你是绝对正确的。在服务器上存储时,字符串类似于“{a:Your's}”。从服务器获得响应后,响应为{'a':'Your's}。我的问题是如何转换响应?@Nisar在服务器端修复它您的意思是说您的服务器正在更改您存储的实际数据吗?@mrid我的服务器正在更改实际数据。我会在服务器端检查它。
var str = '{"a":"Your\'s"}';
JSON.parse(str);