我正在开发一个使用调查建筑库surveyjs的应用程序。我正在构建一个工具,用户可以在该工具中将来自该网站的调查JSON输入表单,然后通过触发AWS Lambda函数的ajax请求以字符串形式发送。 lambda函数接受ajax请求,并使用猫鼬将其调查插入MongoDB实例中。
当字符串进入lambda函数时,它看起来像这样:
"{ pages: [ { name: 'page1', elements: [ { type: 'radiogroup', name: 'question1', title: 'IS THIS A SURVEY?', choices: [ { value: 'item1', text: 'Yes' }, { value: 'item2', text: 'No' } ] } ] } ]}"
当我尝试解析该字符串时,出现此错误:
Error: JSON Parse error: Expected '}'
我认为这可能与JSON键不是字符串有关。我还读到我使用单引号可能是问题所在,但是我已经用尽了我的知识库。
总体而言,我的问题是:如何将字符串转换为JSON对象?
谢谢!
答案 0 :(得分:2)
JSON字符串需要将其字符串属性和值用双引号引起来。使用正则表达式和replace
:
const originalStr = "{ pages: [ { name: 'page1', elements: [ { type: 'radiogroup', name: 'question1', title: 'IS THIS A SURVEY?', choices: [ { value: 'item1', text: 'Yes' }, { value: 'item2', text: 'No' } ] } ] } ]}";
const finalStr = originalStr
.replace(/'/g, '"')
.replace(/(\w+):/g, '"$1":');
console.log(JSON.parse(finalStr).pages);
那就是说,如果可能的话,将更好首先修复可以提供结果的任何内容。
答案 1 :(得分:0)
如果您的lambda函数是使用javascript编写的,则可以使用eval
来解析格式错误的JSON,但是在当前上下文中,将eval
的字符串作为实际javascript进行评估,以便获取结果,您必须在字符串中设置一个变量。示例:
var malformedJsonString = "{unquotedName: 'single quoted value'}";
eval("var myParsedJsonObject = "+malformedJsonString+";");
// myParsedJsonObject now contains your parsed JSON object