【问题标题】:How do I access a json property nested in the ['error'] property of another json reponse?如何访问嵌套在另一个 json 响应的 ['error'] 属性中的 json 属性?
【发布时间】:2019-10-08 05:40:29
【问题描述】:

我正在从 Yahoo Stock Lookup API 请求可能的股票代码符号列表,我使用了 CORS Anywhere 服务来避免出现问题。不幸的是,来自 Yahoo API 的原始 json 响应在 CORS 的任何“错误”属性中被格式化为“文本”。

我使用这个之前问过的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 get ionic4


    【解决方案1】:

    你那里没有json,你有一个javascript sn-p:

    YAHOO.Finance.SymbolSuggest.ssCallback()
    

    传入一些转义文本。

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

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

    您应该使用的网址是:

    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 应该能够解析它。

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      相关资源
      最近更新 更多