-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\/"
   }}

如何在 java 中解析这个 JSON?

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 Maps- 请参阅Data Binding with Generics

导航生成的数据结构假设知道输入,即使用JsonNode.get("1");,但无论您如何表示 JSON,您都需要做出相同的假设。

您还可以使用JsonNode.iterator来迭代未知数量的此类“索引”。如果您不知道, 等的数量1,这很有用。2

此外,您可以创建一个匹配每个子对象的 java 类,并使用 Jackson 在给定每个子对象的情况下创建该类的实例。请参阅完整数据绑定 (POJO) 示例

于 2012-07-27T06:29:14.100 回答