JavaScript fetch API,为什么response.json()返回javascript对象(而不是JSON字符串)?

sg3maiej  于 4个月前  发布在  Java
关注(0)|答案(2)|浏览(71)

我知道Body.json()是一个读取响应流并将响应解析为json的函数。但是当我在响应上调用json()后console.log jsonData时,我得到了一个javascript对象。jsonData不应该返回一个json字符串而不是javascript对象吗?因为我们还没有调用JSON.parse()将json数据转换为JavaScript对象。

function fetchData() {
  fetch(`https://sv443.net/jokeapi/v2/joke/Any?type=single&idRange=${id}`)
    .then((response) => response.json())
    .then((jsonData) => {setJoke(jsonData);console.log(jsonData)});
}

字符串

  • 控制台日志输出**:*

{category:“Programming”,jokeType:“single”}

  • 控制台日志预期输出**:*

{“category”:“Programming”,“jokeType”:“single”}

muk1a3rh

muk1a3rh1#

“解析为JSON”意味着它将响应视为JSON并进行解析(将其转换为JavaScript数据结构)。
并不意味着它将它字符串化为JSON(这将是相反的,并且(在这种情况下)也是毫无意义的:它 * 已经是 * JSON)。
如果你想从响应中得到原始的JSON,那么用text()方法将其作为文本读取。

inkz8wg9

inkz8wg92#

Response接口的JSON()方法接受一个Response流并将其读取完成。它返回一个promise,该promise将解析正文文本的结果解析为JSON。
请注意,尽管方法名为JSON(),但结果不是JSON,而是将JSON作为输入并解析以生成JavaScript对象的结果。
Mdn

相关问题