【问题标题】:How to convert stringified surveyjs JSON-like object into actual JSON如何将字符串化的surveyjs类JSON对象转换为实际的JSON
【发布时间】:2018-07-19 01:37:45
【问题描述】:

我正在开发一个使用调查构建库surveyjs 的应用程序。我正在构建一个工具,用户可以将来自该网站的调查 JSON 输入表单,然后通过触发 AWS Lambda 函数的 ajax 请求作为字符串发送。 lambda 函数接受 ajax 请求并使用 mongoose 将他们的调查插入到 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 对象?

谢谢!

【问题讨论】:

  • 单引号不是有效的json。

标签: javascript json string surveyjs


【解决方案1】:

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);

也就是说,如果可能的话,最好首先解决任何服务于结果的问题。

【讨论】:

  • 这成功了!非常感谢。我应该在几个小时前发布这个。如果可以,我会在两分钟内接受答案。干杯!
  • @KyleFrye 上面的正则表达式很脆弱,如果您的 JSON 包含任何带有单引号的值,即使它们被转义,也会损坏数据,例如{title: 'John\'s Awesome Survey'} 将变为 {"title": "John"s Awesome Survey"},这是无效的 JSON,如果您尝试使用 JSON.parse() 解析它会出错。此外,它会破坏任何带有单词后跟冒号的值,例如{title: 'Puppies: Do you love them!?'} 将变为 {"title": ""Puppies": Do you love them!?"},这也是无效的,并且 JSON.parse() 也会失败。我的回答处理了这些情况。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 2018-03-05
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2018-06-09
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多