使用特殊字符 \" 在 Javascript 中提取 JSON 值

Extracting JSON value in Javascript with special character \"

我如何从下面的 json 中提取 text,因为它包含 \" 它给了我一个未定义的

{ 
   "answers":[ 
      { 
         "questions":[  ],
         "answer":"{\"text\":\"I am Ellina. I can't believe you forgot my name\",\"speech\":\"I am Ellina. I can't believe you forgot my name\"}",
         "score":100,
         "id":106,
         "source":"Editorial",
         "metadata":[ 

         ],
         "context":{ 
            "isContextOnly":false,
            "prompts":[ 

            ]
         }
      }
   ],
   "debugInfo":null,
   "activeLearningEnabled":false
}

i tried using console.log(Answer: ${JSON.stringify(res.data.answers[0].answer.text)}); and also console.log(Answer: ${res.data.answers[0].answer.text});

answer 的值是一个 字符串

它不是一个对象,所以它没有 text 属性(这就是为什么它是 undefined)。

好像是JSON,可以解析一下:

const answer = JSON.parse(es.data.answers[0].answer);
const text = answer.text;

请注意,JSON 文本中的一个值是另一个 JSON 文本的字符串表示形式是 非常糟糕的数据格式设计的一个好兆头

更改 API 使其 returns answer 作为对象而不是 JSON 表示对象将是更好的方法。

您将必须执行以下操作 -

let parsed = JSON.parse(input.answers[0].answer);

其中输入是您提供的 json。此外,如果你有一个长列表并且你希望 json 被自动解析,那么你可以这样做 -

input.answers = input.answers.map((answer)=>{
    answer.answer = JSON.parse(answer.answer);
    return answer;
})

以上代码会自动将您的 json 字符串转换为已解析的 JSON。

let input = {
  "answers": [{
    "questions": [],
    "answer": "{\"text\":\"I am Ellina. I can't believe you forgot my name\",\"speech\":\"I am Ellina. I can't believe you forgot my name\"}",
    "score": 100,
    "id": 106,
    "source": "Editorial",
    "metadata": [

    ],
    "context": {
      "isContextOnly": false,
      "prompts": [

      ]
    }
  }],
  "debugInfo": null,
  "activeLearningEnabled": false
}

console.log(input);

input.answers = input.answers.map((answer) => {
  answer.answer = JSON.parse(answer.answer);
  return answer;
});

console.log(input);