2013-08-22 23 views
0

我有JSON字符串/響應,我需要簡單的解析它並獲取對象/數組,它可以重複,所以我需要按列表獲得列表,其實我不知道該怎麼做,因爲很多解析器和所有使用簡單JSON-es的示例,但是我有點困難,我需要在其中導航。 這裏是我的JSON的例子解析JSON字符串java,最佳實踐

{ 
    "HotelListResponse": { 
     "customerSessionId": "0ABAAA83-04C7-5B91-40A2-754D7299476C", 
     "numberOfRoomsRequested": 1, 
     "moreResultsAvailable": true, 
     "cacheKey": "-4804c75b:140a754d729:4da2", 
     "cacheLocation": "10.186.170.131:7300", 
     "HotelList": { 
      "@activePropertyCount": "1157", 
      "@size": "1", 
      "HotelSummary": { 
       "@order": "0", 
       "hotelId": 403147, 
       "name": "Justabed - Hostel", 
       "address1": "38 avenue augustin dumont", 
       "city": "Malakoff", 
       "postalCode": 92240, 
       "countryCode": "FR", 
       "airportCode": " ", 
       "supplierType": "E", 
       "propertyCategory": 5, 
       "hotelRating": 0, 
       "confidenceRating": 52, 
       "amenityMask": 8, 
       "tripAdvisorRating": 1.5, 
       "locationDescription": "Near Paris Expo Porte de Versailles", 
       "shortDescription": "<p><b>Property Location</b> <br />With a stay at Justabed in Vanves, you'll be close to Stade de la Plaine and Eiffel Tower.<br/> This hostel is within close proximity of Georges Brassens Park and", 
       "highRate": 24.87, 
       "lowRate": 24.87, 
       "rateCurrencyCode": "EUR", 
       "latitude": 48.81804, 
       "longitude": 2.30196, 
       "proximityDistance": 2.5680416, 
       "proximityUnit": "MI", 
       "hotelInDestination": true, 
       "thumbNailUrl": "/hotels/5000000/4850000/4849100/4849100/4849100_7_t.jpg", 
       "deepLink": "http://travel.ian.com/index.jsp?pageName=hotAvail&cid=55505&hotelID=403147&mode=2&numberOfRooms=1&room-0-adult-total=1&room-0-child-total=0&arrivalMonth=8&arrivalDay=18&departureMonth=8&departureDay=21&showInfo=true&locale=en_US&currencyCode=EUR", 
       "RoomRateDetailsList": { 
        "RoomRateDetails": { 
         "roomTypeCode": 200166353, 
         "rateCode": 201887482, 
         "maxRoomOccupancy": 1, 
         "quotedRoomOccupancy": 1, 
         "minGuestAge": 3, 
         "roomDescription": "Single Beds in Mixed Dormitory Room - Non refundable", 
         "currentAllotment": 8, 
         "propertyAvailable": true, 
         "propertyRestricted": false, 
         "expediaPropertyId": 4849100, 
         "rateKey": "0ABAAA83-04C7-5B91-40A2-754D72994DA3", 
         "RateInfo": { 
          "@rateChange": "false", 
          "@promo": "false", 
          "@priceBreakdown": "true", 
          "ChargeableRateInfo": { 
           "@total": "79.83", 
           "@surchargeTotal": "5.22", 
           "@nightlyRateTotal": "74.61", 
           "@maxNightlyRate": "24.87", 
           "@currencyCode": "EUR", 
           "@commissionableUsdTotal": "99.65", 
           "@averageRate": "24.87", 
           "@averageBaseRate": "24.87", 
           "NightlyRatesPerRoom": { 
            "@size": "3", 
            "NightlyRate": [ 
             { 
              "@promo": "false", 
              "@rate": "24.87", 
              "@baseRate": "24.87" 
             }, 
             { 
              "@promo": "false", 
              "@rate": "24.87", 
              "@baseRate": "24.87" 
             }, 
             { 
              "@promo": "false", 
              "@rate": "24.87", 
              "@baseRate": "24.87" 
             } 
            ] 
           }, 
           "Surcharges": { 
            "@size": "1", 
            "Surcharge": { 
             "@amount": "5.22", 
             "@type": "TaxAndServiceFee" 
            } 
           } 
          } 
         }, 
         "ValueAdds": { 
          "@size": "1", 
          "ValueAdd": { 
           "@id": "2048", 
           "description": "Free Wireless Internet" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+1

這裏有一個類似的問題:http://stackoverflow.com/a/1710231/864571 – jaesanx

回答

0

我總結,並用傑克遜 這裏是一個答案,也許這將有用的另一個人

public void parseLink(String jsonObject) { 
     try { 
      ObjectMapper mapper = new ObjectMapper(); 
      JsonFactory factory = mapper.getJsonFactory(); // since 2.1 use mapper.getFactory() instead 
      JsonParser jp = factory.createJsonParser(jsonObject); 
      JsonNode input = mapper.readTree(jp); 

     // final JsonNode results = input.get("HotelListResponse").get("HotelList").get("HotelSummary"); 

      Iterator<Entry<String, JsonNode>> nodeIterator = input.get("HotelListResponse").getFields(); 

      while (nodeIterator.hasNext()) { 
       Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>) nodeIterator.next(); 
       System.out.println("key --> " + entry.getKey() + " value-->" + entry.getValue()); 

      } 

      Iterator<Entry<String, JsonNode>> nodeIterator1 = input.get("HotelListResponse").get("HotelList").getFields(); 

      while (nodeIterator1.hasNext()) { 
       Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>) nodeIterator1.next(); 
       System.out.println("key --> " + entry.getKey() + " value-->" + entry.getValue()); 

      } 

      Iterator<Entry<String, JsonNode>> nodeIterator2 = input.get("HotelListResponse").get("HotelList").get("HotelSummary").getFields(); 

      while (nodeIterator2.hasNext()) { 
       Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>) nodeIterator2.next(); 
       System.out.println("key --> " + entry.getKey() + " value-->" + entry.getValue()); 

      } 




     } catch (IOException ex) { 
      Logger.getLogger(HotelBean.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
1

我會使用這個庫,像http://json-lib.sourceforge.net/(別人都在那裏。這只是我第一個發現了一個網頁搜索)

除非當然,這是一個學校項目或什麼,你需要編寫自己的解析器。在這種情況下,也許你應該提出一個更具體的問題,並要求不要問怎麼做。

4

我知道有2個庫用於解析Java中的JSON:GSON和Jackson。我知道一些關於傑克遜和它有3種方式工作:

  1. 你可以問傑克遜的JSON解析成一個對象
  2. 你可以閱讀你的JSON和內存中加載它,所以你可以在它導航。
  3. 你可以閱讀你的JSON像小溪

下面是有關這些方面的鏈接:http://wiki.fasterxml.com/JacksonInFiveMinutes