0

有効な複雑な json を取得しました。この json を解析し、この複雑な json から ak、dt、mi のみの値を Java で出力する必要があります...助けていただければ幸いです...

{
  "CP": "{\"e\":{\"h\":{\"ak\":\"1c8d1d7eaa32ff3f58a882\",\"at\":\"app\"},\"c\":{\"dt\":\"MEmulator\",\"mi\":\"DD278047D56BF292F1FC16F\",\"ui\":\"m4J\/2s=\",\"av\":\"0.2\",\"pn\":\"WP\",\"pv\":\"7.10\",\"nv\":\"C# 1.1.0\",\"al\":\"en\"},\"b\":[{\"ts\":139658547,\"tz\":-400,\"s\":\"StartUpScreen\",\"et\":8,\"ev\":\"sessionStart\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{\"DaySessionStarted\":\"Tuesday\"}},{\"ts\":1319549658751,\"tz\":-400,\"s\":\"StartUpScreen\",\"et\":3,\"ev\":\"AutomaticFeedRefresh\",\"si\":\"19477682-de5ec331dc33\",\"tt\":{}},{\"ts\":1319549675609,\"tz\":-400,\"s\":\"MainScreen\",\"et\":3,\"ev\":\"MainScreen Event\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{}},{\"ts\":1319549677179,\"tz\":-400,\"s\":\"MainScreen\",\"et\":3,\"ev\":\"MainScreen Event\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{}},{\"ts\":1319549678401,\"tz\":-400,\"s\":\"MainScreen\",\"et\":3,\"ev\":\"MainScreen Event\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{}},{\"ts\":1319549679973,\"tz\":-400,\"s\":\"MainScreen\",\"et\":3,\"ev\":\"MainScreen Event\",\"si\":\"19477682-c9-19bec331dc33\",\"tt\":{}}],\"tt\":{\"OSV\":\"ME\"}}}",
  "SP": {
    "httpHeaders": {
      "x-bluecoat-via": [
        "35D3468F4D5F18"
      ],
      "content-type": [
        "application\/x-form-ur"
      ],
      "connection": [
        "Keep-Alive"
      ],
      "host": [
        "20.198.134.198:8080"
      ],
      "accept": [
        "text\/html, image\/gif, image\/jpeg, *; q=.2, *\/*; q=.2"
      ],
      "content-length": [
        "1791"
      ],
      "user-agent": [
        "Java\/1.6.0_23"
      ]
    },
    "senderIp": [
      "112.101.216.113"
    ],
    "receiveTimeStamp": "2012-06-26T06:29:36+0000"
  }
}
4

3 に答える 3

2

json-pathを使用します。

JSON の xpath のようなもので、JSON オブジェクトに文字列クエリを記述できます。プロジェクトサイトには、可能な使用法を示す多くの例がありますが、あなたの場合はおそらく単なるドット表記です。

提供された JSON の例:

// First extract the CP value, as its JSON-string-inside-JSON:
String cp = JsonPath.read(yourJsonString, "$.CP");

// Treat the `cp` as another JSON-string, and extract the ak value:
String ak = JsonPath.read(cp, "$.e.h.ak");

// Do the rest yourself...
于 2012-08-07T10:44:33.097 に答える
1

他の人が提案しているように、使用できるライブラリはたくさんあります(npeの提案は本当に素晴らしいようです)。一方、これらの単純なケースしかなく、JSONで他に何もする必要がない場合は、必要なのは正規表現だけかもしれません。本質的に、JSONは単なるテキストであるため、次のようなことができます。

    Pattern akPattern = Pattern.compile("ak\":\"([^\"]+)");
    Matcher matcher = akPattern.matcher(jsonAsString);

    matcher.find();
    String akValue = matcher.group(1);

    System.out.println(akValue);

これにより、「ak」の値が出力されます。

しかし、繰り返しになりますが、これは、他にJSON要件がない場合にのみ行います。それ以外の場合は、JSONライブラリを使用します。

私の2セント。

于 2012-08-07T10:55:16.480 に答える