Javascript 如何将stringified surveyjs类似JSON的对象转换为实际的JSON

Javascript 如何将stringified surveyjs类似JSON的对象转换为实际的JSON,javascript,json,string,surveyjs,Javascript,Json,String,Surveyjs,我正在开发一个使用测量大楼库的应用程序。我正在构建一个工具,用户可以将来自该网站的调查JSON输入到表单中,然后通过触发AWS Lambda函数的ajax请求将其作为字符串发送。lambda函数接受ajax请求,并使用mongoose将它们的调查插入MongoDB实例 当字符串进入lambda函数时,如下所示: “{pages:[{name:'page1',元素:[{type:'radiogroup',name:'question1',title:'THIS A SURVEY?',选项:[{va

我正在开发一个使用测量大楼库的应用程序。我正在构建一个工具,用户可以将来自该网站的调查JSON输入到表单中,然后通过触发AWS Lambda函数的ajax请求将其作为字符串发送。lambda函数接受ajax请求,并使用mongoose将它们的调查插入MongoDB实例

当字符串进入lambda函数时,如下所示:

“{pages:[{name:'page1',元素:[{type:'radiogroup',name:'question1',title:'THIS A SURVEY?',选项:[{value:'item1',text:'Yes'},{value:'item2',text:'No'}]}”

当我尝试解析该字符串时,会出现以下错误:

错误:JSON解析错误:应为“}”

我认为这可能与JSON键不是字符串有关。我还读到,我使用单引号可能是一个潜在的问题,但我已经用尽了我的知识库

总的来说,我的问题是:如何将该字符串转换为JSON对象


谢谢

JSON字符串的字符串属性和值需要双引号。使用正则表达式并替换:

const originalStr=“{pages:[{name:'page1',elements:[{type:'radiogroup',name:'question1',title:'THIS A SURVEY?”,选项:[{value:'item1',text:'Yes'},{value:'item2',text:'No'}]}];
const finalStr=originalStr
.替换(/“/g,”))
.替换(/(\w+):g,“$1”:”);

console.log(JSON.parse(finalStr.pages);
如果您的lambda函数是使用javascript编写的,那么您可以使用
eval
解析格式错误的JSON,但是
eval
'd字符串在当前上下文中被评估为实际的javascript,因此要获得结果,您必须在字符串中设置一个变量。例如:

var malformedJsonString = "{unquotedName: 'single quoted value'}";
eval("var myParsedJsonObject = "+malformedJsonString+";");
// myParsedJsonObject now contains your parsed JSON object

单引号不是有效的json。这很有效!非常感谢。我应该在几个小时前发布此消息。我会在两分钟内接受答案,如果可以的话。干杯!@KyleFrye上面的正则表达式很脆弱,如果你的json中包含任何单引号的值,即使它们被转义,也会损坏数据,例如
{title:'John's Awesome Survey'}
将变成
{“title”:“John's Awesome Survey”}
这是无效的JSON,如果您尝试用JSON.parse()解析它,它将出错。此外,它还将用一个后跟冒号的单词损坏任何值,例如,
{title:“Puppies:你爱他们吗!?”}
将变成
{“title:“Puppies:你爱他们吗!?”}
,这也是无效的,也将使JSON.parse()失败。我的回答处理了这些情况。