0

私はこのような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"}]}

今問題は、使用してLastdayからの値を取得したいということですkWhReading

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を削除する方法がわかりません。誰でもここで私を助けることができますか?

4

2 に答える 2

0

jsonArray を取得したら:

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

次に、インデックス番号を指定して getJSONObject() を使用し、その配列内の要素を取得する必要があります。2 つ目は「kWhReading」なので、次のようになります。

JSONObject kWhReadObject = jsonArray.getJSONObject(1);

それはあなたをここに置くべきです:

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

kWhReading (それ自体が配列) の値を取得するには:

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

今あなたはここにいます:

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

インデックス番号に戻ります。繰り返しますが、2 番目のものが必要です。

JSONObject lastDayObj = kWhReadArray.getJSONObject(1);

そして最後に:

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

ドキュメントはこちら: http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONArray.html

于 2013-09-07T14:24:37.363 に答える
0

JSON ライブラリを使用したことはありませんが、これは正しい方向に進むはずです

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

名前をjsonobject取得してから、オフセット 1 (2 番目のオブジェクト) の要素を取得します。JSONArray"kWhReading"

これはすべて API ドキュメントにあります。ライブラリの機能を理解するには、一歩下がってドキュメントをよく読んでください。

于 2012-11-26T06:56:59.680 に答える