JSON.синтаксический анализ из URL

#json #reactjs

#json #reactjs

Вопрос:

У меня есть несколько URL-адресов, похожих на https://zkillboard.com/api/stats/solarSystemID/31000007 / Я пытаюсь извлечь JSON из URL-адреса в объект.

Я смог дойти до того, что возвращает обещание, PromiseState: выполнено, а PromiseResults содержит объект с данными, которые я ищу.

   async function readJSON(url:string) {
    var request = new XMLHttpRequest();
    request.open ('get', url, false)
    request.send(null)
    if (request.status == 200) {
      return JSON.parse(request.responseText)
    }
  }
  const systemJSON = readJSON('https://zkillboard.com/api/stats/solarSystemID/31000007/')

  console.log(systemJSON) 
 

Как я могу гарантировать, что моя консоль.журнал возвращает только результат PromiseResult?

Ответ №1:

Это, кажется, исправило это для меня, удалило асинхронность из функции, а также .responseText в JSON.parse()

   function readJSON(url:string) {
    var request = new XMLHttpRequest();
    request.open ('get', url, false)
    request.send(null)
    if (request.status == 200) {
      return JSON.parse(request.response)
    }
  }
  
  const systemJSON = readJSON('https://zkillboard.com/api/stats/solarSystemID/31000007/')
  
  const printJSON = () =>{
    console.log(systemJSON)
  }

  printJSON();
 

Ответ №2:

Во-первых, при обработке json из внешнего источника я бы предложил обернуть его в функцию try / catch, чтобы избежать неожиданных ошибок.

Во-вторых, я думаю, проблема в том, что readJSON возвращает обещание, поэтому вам, возможно, придется его дождаться.

 try {
   const json = await readJSON('https://zkillboard.com/api/stats/solarSystemID/31000007/')
   const systemJSON = JSON.parse(json);
} catch (error) {
   // Woops something happend - see error variable
}