Fala Marcos, tudo bem?
A função json()
irá ler todo conteúdo da requisição e nos retorna uma promise, que ao ser resolvida, irá nos retornar o conteúdo do body
(que é aonde fica a resposta da nossa requisição, porém ela vem como ReadableStream
, que em resumo seria os nossos dados sendo trafegados pela rede em forma de bytes), em forma de objeto.
E a função JSON.parse
irá analisar uma string em JSON e nos retornar um objeto, e utilizar essa função não funciona justamente porque a nossa requisição não é uma string JSON para ser convertida em objeto.
Todas as documentações sobre o que eu falei estão linkados nos nomes citados.
Espero ter ajudado, abraços e bons estudos :D