我知道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”}
2条答案
按热度按时间muk1a3rh1#
“解析为JSON”意味着它将响应视为JSON并进行解析(将其转换为JavaScript数据结构)。
它并不意味着它将它字符串化为JSON(这将是相反的,并且(在这种情况下)也是毫无意义的:它 * 已经是 * JSON)。
如果你想从响应中得到原始的JSON,那么用
text()
方法将其作为文本读取。inkz8wg92#
Response接口的
JSON()
方法接受一个Response流并将其读取完成。它返回一个promise,该promise将解析正文文本的结果解析为JSON。请注意,尽管方法名为
JSON()
,但结果不是JSON,而是将JSON作为输入并解析以生成JavaScript对象的结果。Mdn