Как получить доступ к свойству json, вложенному в свойство ['error'] другого отклика json? - PullRequest
1 голос
/ 08 октября 2019

Я запрашиваю список возможных символов тикеров в API Yahoo Lookup Lookup, я использовал службу CORS Anywhere, чтобы избежать проблем. К сожалению, исходный ответ json от Yahoo API отформатирован как «текст» в свойстве «ошибка» CORS в любом месте.

Я использовал этот ранее заданный вопрос в качестве ссылки на способ доступа к вложеннымproperties.

Вот как выглядит ответ json:

{
  "headers": {
    "normalizedNames": {},
    "lazyUpdate": null
  },
  "status": 200,
  "statusText": "OK",
  "url": "https://cors-anywhere.herokuapp.com/http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=Amd&region=1&lang=en&callback=YAHOO.Finance.SymbolSuggest.ssCallback",
  "ok": false,
  "name": "HttpErrorResponse",
  "message": "Http failure during parsing for https://cors-anywhere.herokuapp.com/http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=Amd&region=1&lang=en&callback=YAHOO.Finance.SymbolSuggest.ssCallback",
  "error": {
    "error": {
      "line": 9848,
      "column": 56,
      "sourceURL": "capacitor://localhost/vendor-es2015.js"
    },
    "text": "YAHOO.Finance.SymbolSuggest.ssCallback({\"ResultSet\":{\"Query\":\"Amd\",\"Result\":[{\"symbol\":\"AMD\",\"name\":\"Advanced Micro Devices, Inc.\",\"exch\":\"NMS\",\"type\":\"S\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Equity\"},{\"symbol\":\"DOX\",\"name\":\"Amdocs Limited\",\"exch\":\"NMS\",\"type\":\"S\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Equity\"},{\"symbol\":\"AMDVX\",\"name\":\"American Century Mid Cap Value Fund R6 Class\",\"exch\":\"NAS\",\"type\":\"M\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Fund\"},{\"symbol\":\"AMDWX\",\"name\":\"Amana Mutual Funds Trust Developing World Fund Investor\",\"exch\":\"NAS\",\"type\":\"M\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Fund\"},{\"symbol\":\"AMDAX\",\"name\":\"AMIDEX35 Israel Fund Class A\",\"exch\":\"NAS\",\"type\":\"M\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Fund\"},{\"symbol\":\"AMDEX\",\"name\":\"AMIDEX35 Israel Mutual Fund\",\"exch\":\"NAS\",\"type\":\"M\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Fund\"},{\"symbol\":\"AMDCX\",\"name\":\"AMIDEX35 Israel Fund Class C\",\"exch\":\"NAS\",\"type\":\"M\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Fund\"},{\"symbol\":\"AMDRX\",\"name\":\"American Beacon Mid-Cap Value Fund R6 Class\",\"exch\":\"NAS\",\"type\":\"M\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Fund\"},{\"symbol\":\"AMDLY\",\"name\":\"Amada Holdings Co., Ltd.\",\"exch\":\"PNK\",\"type\":\"S\",\"exchDisp\":\"OTC Markets\",\"typeDisp\":\"Equity\"}]}});"
  }
}

Вот что я пробовал:

return this.yahooResult.subscribe(data => {return data['error']['text']['ResultSet']['Result']['symbol']});

Я пытаюсь получить доступ "symbol" : "AMD"из ответа API Yahoo, вложенного в свойство "text" ответа CORS.

Я не получаю много информации об ошибке: ⚡️ [error] - ERROR

1 Ответ

1 голос
/ 08 октября 2019

У вас нет json, у вас есть фрагмент javascript:

YAHOO.Finance.SymbolSuggest.ssCallback()

С некоторым переданным в нем экранированным текстом.

Это не случай синтаксического анализа, это aслучай исправления ошибки.

Я думаю, что вы используете неправильный вызов API. В нем есть параметр callback, который оборачивает ответ в функцию и нарушает способность cors -where анализировать ответ.

URL, который вы должны использовать:

http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=Amd&region=1&lang=en

Not:

http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=Amd&region=1&lang=en&callback=YAHOO.Finance.SymbolSuggest.ssCallback

Тогда возвращается простой JSON, и cors -where должен иметь возможность его анализировать.

...