如何使用angular2或typescript在位置3的JSON中解决意外的标记p

时间:2017-11-02 06:57:13

标签: json angular typescript

enter image description here 当我在编辑后保存调查内容时,我收到此错误,

SyntaxError: Unexpected token p in JSON at position 3
at JSON.parse (<anonymous>)

请有人帮我解决这个问题,我特此粘贴我的代码,请帮助。

ts代码:

   Surveypost = () => {
    let token = this.auth.getAccessTokenId();
    console.log(token)
    let currentUser = this.auth.getCurrentUserData();
    console.log(this.editor.text)
    console.log(this.survey_val)
    // let survey_json = JSON.parse(this.editor.text);
    let survey_json:any;
   try{
   survey_json = JSON.parse(this.editor.text);
} catch(e) {
    /*Handle the error scenario here*/
}
    let survey_data = {
      "value": survey_json,
    };
    console.log(survey_data)
    this.AdminAPI
      .createandSet(survey_data, token)
      .subscribe(
        survey => {
           console.log(survey)
        }, error => {
          console.log(error);
        }

      );
  }

我得到安慰输出,直到console.log(this.editor.text),然后出现错误。

console.log(this.editor.text)的安慰输出就像这样开始,

{
 pages: [
  {
   name: "page1",
   elements: [
    {
     type: "radiogroup",
     name: "price",
     title: "How long have you been a customer at {companyname}?",
     isRequired: true,
     choices: [
      {
       value: "less",
       text: "0 - 3 months."
      },
      {
       value: "medium",
       text: "3 - 12 months."
      },
      {
       value: "High",
       text: "12 + months."
      }
     ]

2 个答案:

答案 0 :(得分:1)

this.editor.text包含无效的JSON。 尝试解析该无效JSON时,会发生错误。因此,简而言之,以下行是崩溃的行:let survey_json = JSON.parse(this.editor.text);

console.log(this.editor.text)获取输出,通过JSON验证器/格式化程序运行它: https://jsonformatter.curiousconcept.com/ 然后你应该能够很容易地看到错误发生的原因,以及为什么程序无法解析JSON

在添加JSON时编辑

从上面提到的链接中可以看到,JSON无效,这就是该行错误消息的原因:let survey_json = JSON.parse(this.editor.text);。 例如,基本JSON应具有以下结构:

{
 "key" : "value",
 "key2" : "value2"
}

您也没有正确结束JSON。我在这里将JSON格式化为有效的JSON:

{  
"pages":[  
  {  
     "name":"page1",
     "elements":[  
        {  
           "type":"radiogroup",
           "name":"price",
           "title":"How long have you been a customer at {companyname}?",
           "isRequired":true,
           "choices":[  
              {  
                 "value":"less",
                 "text":"0 - 3 months."
              },
              {  
                 "value":"medium",
                 "text":"3 - 12 months."
              },
              {  
                 "value":"High",
                 "text":"12 + months."
              }
           ]
        }
     ]
  }
 ]
}

答案 1 :(得分:0)

当您尝试解析从第三方源发送的某些文本时,最好使用try catch块包装解析逻辑。 但请记住,只有在修复远程源中的琐碎错误之后才能完成此操作(当然,如果您有访问权限)。

替换,

let survey_json = JSON.parse(this.editor.text);

用,

let survey_json;
try{
   survey_json = JSON.parse(this.editor.text);
} catch(e) {
    /*Handle the error scenario here*/
    /*Lets assign an empty object(or possibly a default value) instead*/
   survey_json = {};
}