3

私は以下のようなJsonを持っています

{"pd":"{\"e\":{\"h\":{\"ak\":\"120\",\"at\":\"app\"},\"b\":[{\"ts\":1319549658547,\"tz\":-400,\"s\":\"StartUpScreen\",\"et\":8,\"ev\":\"sessionStart\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{\"day\":\"Tuesday\"}},{\"ts\":132,\"tz\":-400,\"s\":\"StartUpScreen\",\"et\":3,\"ev\":\"AutomaticFeedRefresh\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{}},{\"ts\":131,\"tz\":-400,\"s\":\"MainScreen\",\"et\":3,\"ev\":\"MainScreen Event\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{}}],\"tt\":{\"OSV\":\"7.10\"}}}","serverPayload":{"httpHeaders":{"x-bluecoat-via":["35D3468EFF4D5F18"],"content-type":["application\/x-www-form-urlencoded"]},"senderIp":["101.100.000.100"]}}

ak、、b [ts,si and tt[day]]の値が必要ですsenderIp。ここで2つの質問があります。「b」と「senderIp」のすべての「ts」属性を抽出するにはどうすればよいですか。私はak、ts、siに以下のコードを使用しました。'tt'を取得する方法がわかりません。また、このコードを実行しているときに、次のような例外が発生します。

    String pd = JsonPath.read(jsonString, "$.pd");
    String ak = JsonPath.read(pd, "$e.h.ak");
    String ak = JsonPath.read(pd, "$e.h.b[0]");
//    String b = JsonPath.read(pd,"$.e.b[0][0]");
//    String b = JsonPath.read(pd,"$.e.b[0][5]");
    System.out.println("value of ak: "+ak);

スレッド「main」の例外 java.lang.ClassCastException: net.minidev.json.JSONObject cannot be cast to java.lang.String

4

1 に答える 1

1

$.e.h.b[0]文字列ではなく、JavaScript オブジェクト (「ts」と「tz」を含むフィールド) のように見えます。したがって、JSON パーサーがそれを文字列ではなく JSONObject として扱うのは合理的です。おそらく、$.e.h.b[0].ts興味のある分野にドリルダウンする必要があります。次のようなものです。

long ts = JsonPath.read(pd, "$e.h.b[0].ts");

String ak =例外を引き起こすのは2行目だと思います。「ts」属性に関する他の質問を理解できません。読みやすいように JSON 文字列をフォーマットできますか?

于 2012-09-17T17:18:38.087 に答える