如何访问嵌套在另一个 json 响应的 ['error'] 属性 中的 json 属性?

How do I access a json property nested in the ['error'] property of another json reponse?

我正在从 Yahoo Stock Lookup API 请求可能的股票代码列表,我使用了 CORS Anywhere 服务来避免出现问题。不幸的是,来自 Yahoo API 的原始 json 响应在 CORS 中的任何地方被格式化为 'text' 'error' 属性.

我使用这个之前问过的 question 作为如何访问嵌套属性的参考。

这是 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']});

我正在尝试从嵌套在 CORS 响应的 "text" 属性 中的 Yahoo API 响应访问 "symbol" : "AMD"

我没有从错误中得到太多信息: ⚡️ [error] - ERROR

那里没有 json,你有一个 javascript 片段:

YAHOO.Finance.SymbolSuggest.ssCallback()

其中传递了一些转义文本。

不是解析的情况,是修复错误的情况。

我认为您使用了错误的 API 调用。它有一个 callback 参数,它将回复包装在一个函数中并破坏了 cors-anywhere 解析响应的能力。

您应该使用的 url 是:

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

不是:

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

然后返回 JSON 并且 cors-anywhere 应该能够解析它。