簡體   English   中英

帶有方括號的JSON錯誤

[英]JSON error with square brackets

我有看起來像這樣的XML文件

<Reading>
<Item Month="_October.xml">
    <kWhReading Firstday="1" />
    <kWhReading Lastday="552" />
</Item>
</Reading>

然后使用這一行代碼

JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( json.toString() );

我懂了

[{"@Month":"_October.xml","kWhReading":[{"@Firstday":"1"},{"@Lastday":"552"}]}]

然后,用這個

JSONObject jsonobject = (JSONObject) jsonArray.get(0);

我懂了

{"@Month":"_October.xml","kWhReading":[{"@Firstday":"1"},{"@Lastday":"552"}]}

現在的問題是,我想使用LastdaykWhReading獲取Lastday的值

JSONObject readingkWhLast = jsonobject.getJSONObject("kWhReading");

但是它不起作用並且拋出了異常

net.sf.json.JSONException: JSONObject["kWhReading"] is not a JSONObject.
at net.sf.json.JSONObject.getJSONObject(JSONObject.java:2058)
at com.syntronic.bean.RecentUsage.doPost(RecentUsage.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我很確定這與括在“ Firstday和“ Lastday的方括號有關,但是我不確定如何刪除它。 有人可以在這里幫助我嗎?

從未使用過JSON庫,但這應該是正確的

JSONObject readingkWhLast = jsonobject.getJSONArray("kWhReading").get(1);

從您的jsonobject檢索名為"kWhReading"JSONArray ,然后檢索偏移量為1的元素(第二個對象)。

這些都在API文檔中。 您確實應該退后一步並仔細閱讀文檔,以便您了解庫的功能。

一旦獲得jsonArray:

[{"@Month":"_October.xml","kWhReading":[{"@Firstday":"1"},{"@Lastday":"552"}]}]

然后,您需要使用帶有索引號的getJSONObject()來獲取該數組中的元素。 第二個是“ kWhReading”,因此:

JSONObject kWhReadObject = jsonArray.getJSONObject(1);

那應該把你放在這里:

{"kWhReading":[{"@Firstday":"1"},{"@Lastday":"552"}]}

要獲取kWhReading的值(它本身是一個數組):

JSONArray kWhReadArray = kWhReadObject.getJSONArray("kWhReading");

現在您在這里:

[{"@Firstday":"1"},{"@Lastday":"552"}]

返回索引號。 同樣,您需要第二個:

JSONObject lastDayObj = kWhReadArray.getJSONObject(1);

最后:

String lastDay = lastDayObj.getString("@Lastday");

這些文檔在這里: http : //json-lib.sourceforge.net/apidocs/net/sf/json/JSONArray.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM