-1
${
   "1":{
      "vertical_id":"1",
      "vertical_name":"Men",
      "url_key":"men",
      "meta_title":"Online Shopping For Men - Buy Mens Clothes, Footwear & Accessories At Fetise ",
      "meta_description":null,
      "meta_keywords":"mens apparel, mens clothing, mens accessories online, online mens footwear store, gadgets online for men\r\n",
      "intro_banner_path":"",
      "intro_heading":"",
      "intro_subheading":"",
      "show_products":"1",
      "featured_event_count":"8",
      "is_active":"1",
      "sort_order":"1",
      "twitter_handle":"fetise",
      "facebook_page":"fetise",
      "verticalUrl":"http:\/\/www.fetise.com\/men",
      "verticalUrlComponent":"men\/"
   },
   "2":{
      "vertical_id":"2",
      "vertical_name":"Women",
      "url_key":"women",
      "meta_title":"Online Shopping for Women - Buy Womens Clothes, Footwear & Accessories At Fetise",
      "meta_description":null,
      "meta_keywords":"online womens clothing store, womens apparels online, ladies footwear and accessories store, ladies personal care products online, womens fashion clothes\r\n",
      "intro_banner_path":"",
      "intro_heading":"",
      "intro_subheading":"",
      "show_products":"1",
      "featured_event_count":"0",
      "is_active":"1",
      "sort_order":"2",
      "twitter_handle":"FetiseWomen",
      "facebook_page":"FetiseWomen",
      "verticalUrl":"http:\/\/www.fetise.com\/women",
      "verticalUrlComponent":"women\/"
   }}

このJSONをJavaで解析するにはどうすればよいですか?

4

1 に答える 1

0

私はGSONJacksonの両方を使用しましたが、最終的には Jackson に落ち着きました。JSON 解析を必要とする特定の Java プロジェクトにより適していて、今ではより柔軟かつ/または親しみやすいように見えます。

Jackson Tree Model$を使用して、先頭(無効な JSON)を破棄した後:

// input is your JSON object
ObjectMapper mapper = new ObjectMapper();

// could also use Jackson ObjectNodes:
JsonNode rootNode = mapper.readValue(input.getBytes(), JsonNode.class); 
JsonNode sub1 = rootNode.get("1");
JsonNode sub2 = rootNode.get("2");

if (sub1 != null)
{
    System.out.println("1.vertical_name: " + sub1.get("vertical_name"));
    System.out.println("1.meta_title: " + sub1.get("meta_title"));
}

if (sub2 != null)
{
    System.out.println("2.vertical_name: " + sub2.get("vertical_name"));
    System.out.println("2.meta_title: " + sub2.get("meta_title"));
}

出力:

1.vertical_name: "Men"
1.meta_title: "Online Shopping For Men - Buy Mens Clothes, Footwear & Accessories At Fetise "
2.vertical_name: "Women"
2.meta_title: "Online Shopping for Women - Buy Womens Clothes, Footwear & Accessories At Fetise"

入力 JSON は、JSON オブジェクトを JSON 配列として使用しているように見えるという点で特異であり、外側のオブジェクトには fields があります1, 2, ...。したがって、上記のアプローチは JSON を汎用JsonNodeオブジェクトとして解析しますが、Jackson を使用してこれを Java に解析することもできます- Generics を使用したデータ バインディングをMaps参照してください。

結果のデータ構造をナビゲートするには、入力の知識を前提としJsonNode.get("1");ています。

JsonNode.iterator未知の数のそのような「インデックス」を反復処理するために使用することもできます。12などの数がわからない場合に便利です。

さらに、各サブオブジェクトに一致する Java クラスを作成し、Jackson を使用して各サブオブジェクトを指定してそのクラスのインスタンスを作成できます。フル データ バインディング (POJO) の例を参照してください。

于 2012-07-27T06:29:14.100 に答える