时才会出现问题
{
"query": {
"count": 1,
"created": "2015-07-28T05:19:01Z",
"lang": "en-US",
"results": {
"quote": {
"symbol": "GITANJALI.NS",
"Ask": null,
"AverageDailyVolume": null,
"Bid": null,
"AskRealtime": null,
"BidRealtime": null,
"BookValue": null,
"Change_PercentChange": null,
"Change": null,
"Commission": null,
"Currency": null,
"ChangeRealtime": null,
"AfterHoursChangeRealtime": null,
"DividendShare": null,
"LastTradeDate": null,
"TradeDate": null,
"EarningsShare": "9.73",
"ErrorIndicationreturnedforsymbolchangedinvalid": null,
"EPSEstimateCurrentYear": null,
"EPSEstimateNextYear": null,
"EPSEstimateNextQuarter": null,
"DaysLow": null,
"DaysHigh": null,
"YearLow": null,
"YearHigh": null,
"HoldingsGainPercent": null,
"AnnualizedGain": null,
"HoldingsGain": null,
"HoldingsGainPercentRealtime": null,
"HoldingsGainRealtime": null,
"MoreInfo": null,
"OrderBookRealtime": null,
"MarketCapitalization": null,
"MarketCapRealtime": null,
"EBITDA": null,
"ChangeFromYearLow": null,
"PercentChangeFromYearLow": null,
"LastTradeRealtimeWithTime": null,
"ChangePercentRealtime": null,
"ChangeFromYearHigh": null,
"PercebtChangeFromYearHigh": null,
"LastTradeWithTime": null,
"LastTradePriceOnly": null,
"HighLimit": null,
"LowLimit": null,
"DaysRange": null,
"DaysRangeRealtime": null,
"FiftydayMovingAverage": null,
"TwoHundreddayMovingAverage": null,
"ChangeFromTwoHundreddayMovingAverage": null,
"PercentChangeFromTwoHundreddayMovingAverage": null,
"ChangeFromFiftydayMovingAverage": null,
"PercentChangeFromFiftydayMovingAverage": null,
"Name": null,
"Notes": null,
"Open": null,
"PreviousClose": null,
"PricePaid": null,
"ChangeinPercent": null,
"PriceSales": null,
"PriceBook": null,
"ExDividendDate": null,
"PERatio": null,
"DividendPayDate": null,
"PERatioRealtime": null,
"PEGRatio": null,
"PriceEPSEstimateCurrentYear": null,
"PriceEPSEstimateNextYear": null,
"Symbol": "GITANJALI.NS",
"SharesOwned": null,
"ShortRatio": null,
"LastTradeTime": null,
"TickerTrend": null,
"OneyrTargetPrice": null,
"Volume": null,
"HoldingsValue": null,
"HoldingsValueRealtime": null,
"YearRange": null,
"DaysValueChange": null,
"DaysValueChangeRealtime": null,
"StockExchange": null,
"DividendYield": null,
"PercentChange": null
}
}
}
}
这是我正在获取的Json,我正在尝试使用:
将MarketCapitalization从此获取:import org.json.JSONArray;
import org.json.JSONObject;
String marketCap = obj.getJSONObject("query").getJSONObject("results")
.getJSONObject("quote").getString("MarketCapitalization");
但是我得到以下错误
org.json.JSONException: JSONObject["MarketCapitalization"] not a string.
at org.json.JSONObject.getString(JSONObject.java:658)
at com.mobileforce.YahooClient.prepareReadCompany(YahooClient.java:136)
at com.mobileforce.YahooClient.read(YahooClient.java:82)
at com.mobileforce.YahooClient.handleApi(YahooClient.java:42)
at com.mobileforce.YahooServlet.doPost(YahooServlet.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
注意:如果在情况下市值有一些值,那么上述工作完全正常。只有当它为null
使用optString()获取存在的值,否则为空或您定义的默认值:
.optString("MarketCapitalization", "defaultValue");
看到文档
尝试在使用前对null
进行一些主动检查,例如:
jsonObj.isNull("MarketCapitalization"){
//do something
}
您可以尝试getObject()
而不是getString()
,然后检查null。但这显然不是你使用的库的强项
首先检查键" market资本化"的值是否为空如果不为空,做你的工作
JSONObject quoteJson = obj.getJSONObject("query").getJSONObject("results")
.getJSONObject("quote");
if(quoteJson.get("MarketCapitalization")!=null)
{
//do your work
}
JSONObject接收每个数据字段的数组,获取该数据并将其传输到另一个变量,例如使用字段名称作为引用的数组或字符串,例如'value', 'name'等…如果为空,则传输一个白色的值以避免错误。我喜欢这个……
String value;
if(jsonObject.get("name").toString().equals("null")) {
value = "";
}else {
value = jsonObject.getString("name");
}