2013-08-30 212 views
0

我在SpringMVC框架上工作。 我有JSonController像這樣java轉換爲json對象

@RequestMapping(value = "/getOrder/{username}", method = RequestMethod.GET) 
@ResponseBody 
public String getOrderByDeliverymanUsername(@PathVariable("username") String s) throws JSONException { 
    JSONObject orderJsonObject = new JSONObject(); 
    JSONObject productJsonObject = new JSONObject(); 
    JSONObject restaurantJsonObject = new JSONObject(); 

    JSONArray restaurantArray = new JSONArray(); 
    JSONArray productArray = new JSONArray(); 

     orderJsonObject.put("customerLatitude", orderService.getOrderByDeliverymanUsername(s).getOrderLat()); 
     orderJsonObject.put("customerLongitude", orderService.getOrderByDeliverymanUsername(s).getOrderLon()); 
     orderJsonObject.put("customerName", orderService.getOrderByDeliverymanUsername(s).getMember().getMemberName()); 
     orderJsonObject.put("orderDescription", orderService.getOrderByDeliverymanUsername(s).getOrderAddressDescription()); 
     orderJsonObject.put("totalprice", orderService.getOrderByDeliverymanUsername(s).getTotalPrice()); 


     List<Restaurant> restaurantList = new ArrayList<Restaurant>(); 
     for (Restaurant restaurant : orderService.getOrderByDeliverymanUsername(s).getRestaurants()) { 
      restaurantList.add(restaurant); 
     } 

     for (Restaurant restaurant : restaurantList) { 
      try { 
       restaurantJsonObject.put("restaurantID", restaurant.getId()); 
       restaurantJsonObject.put("restaurantName", restaurant.getRestaurantName()); 
       restaurantJsonObject.put("restaurantLatitude", restaurant.getRestaurantLat()); 
       restaurantJsonObject.put("restaurantLongitude", restaurant.getRestaurantLon()); 
      } catch (NullPointerException e){ 
       restaurantJsonObject.put("restaurantID", 0); 
       restaurantJsonObject.put("restaurantName", 0); 
       restaurantJsonObject.put("restaurantLatitude", 0); 
       restaurantJsonObject.put("restaurantLongitude", 0); 
      } 
      restaurantArray.put(restaurantJsonObject); 
     } 

     for(ProductInCart product : orderService.getOrderByDeliverymanUsername(s).getProductsInCart()){ 
      productJsonObject.put("productName",product.getProduct().getProductName()); 
      productJsonObject.put("productPrice",product.getProduct().getProductPrice()); 
      productArray.put(productJsonObject); 
     } 
     orderJsonObject.put("products", productArray); 
     orderJsonObject.put("restaurants", restaurantArray); 

    return orderJsonObject.toString(); 
} 

我不知道爲什麼在restaurantArray和productArray對象是重複返回字符串對象。 ex。

{ 
    customerName : "Pitak", 
    totalprice : 4863, 
    orderDescription : "some where", 
    restaurants : [{ 
      restaurantLatitude : 33.1414, 
      restaurantID : 3, 
      restaurantLongitude : 44.5555, 
      restaurantName : "Nong hoi" 
     }, { 
      restaurantLatitude : 33.1414, 
      restaurantID : 3, 
      restaurantLongitude : 44.5555, 
      restaurantName : "Nong hoi" 
     } 
    ], 
    products : [{ 
      productPrice : 35, 
      productName : "Khao kha mu" 
     }, { 
      productPrice : 35, 
      productName : "Khao kha mu" 
     }, { 
      productPrice : 35, 
      productName : "Khao kha mu" 
     }, { 
      productPrice : 35, 
      productName : "Khao kha mu" 
     } 
    ], 
    customerLatitude : 66.0956, 
    customerLongitude : 88.45671 
} 

謝謝大家,對不起我的英文。

解決!!我只是將JsonObject移入循環中

@RequestMapping(value = "/getOrder/{username}", method = RequestMethod.GET) 
    @ResponseBody 
    public String getOrderByDeliverymanUsername(@PathVariable("username") String s) throws JSONException { 
     JSONObject orderJsonObject = new JSONObject(); 
     JSONArray restaurantArray = new JSONArray(); 
     JSONArray productArray = new JSONArray(); 
     orderJsonObject.put("customerLatitude", orderService.getOrderByDeliverymanUsername(s).getOrderLat()); 
     orderJsonObject.put("customerLongitude", orderService.getOrderByDeliverymanUsername(s).getOrderLon()); 
     orderJsonObject.put("customerName", orderService.getOrderByDeliverymanUsername(s).getMember().getMemberName()); 
     orderJsonObject.put("orderDescription", orderService.getOrderByDeliverymanUsername(s).getOrderAddressDescription()); 
     orderJsonObject.put("totalprice", orderService.getOrderByDeliverymanUsername(s).getTotalPrice()); 


     List<Restaurant> restaurantList = new ArrayList<Restaurant>(); 
     for (Restaurant restaurant : orderService.getOrderByDeliverymanUsername(s).getRestaurants()) { 
      restaurantList.add(restaurant); 
     } 

     for (Restaurant restaurant : restaurantList) { 
      JSONObject restaurantJsonObject = new JSONObject(); 
      try { 
       restaurantJsonObject.put("restaurantID", restaurant.getId()); 
       restaurantJsonObject.put("restaurantName", restaurant.getRestaurantName()); 
       restaurantJsonObject.put("restaurantLatitude", restaurant.getRestaurantLat()); 
       restaurantJsonObject.put("restaurantLongitude", restaurant.getRestaurantLon()); 
      } catch (NullPointerException e){ 
       restaurantJsonObject.put("restaurantID", 0); 
       restaurantJsonObject.put("restaurantName", 0); 
       restaurantJsonObject.put("restaurantLatitude", 0); 
       restaurantJsonObject.put("restaurantLongitude", 0); 
      } 
      restaurantArray.put(restaurantJsonObject); 
     } 

     for(ProductInCart product : orderService.getOrderByDeliverymanUsername(s).getProductsInCart()){ 
      JSONObject productJsonObject = new JSONObject(); 
      productJsonObject.put("productName",product.getProduct().getProductName()); 
      productJsonObject.put("productPrice",product.getProduct().getProductPrice()); 
      productArray.put(productJsonObject); 
     } 
     orderJsonObject.put("products", productArray); 
     orderJsonObject.put("restaurants", restaurantArray); 

    return orderJsonObject.toString(); 
} 

再次感謝大家。

+0

@Tarsem其中,請提供行號 –

+0

謝謝,我在錯誤的地方創建json對象。我把它們移到他們的for循環中。 – user2731848

+0

請檢查json對象的創建邏輯,你必須在錯誤的地方創建 – csk

回答

0

當你這樣做:

for (Restaurant restaurant : restaurantList) 

它會產生一個迭代器,並通過它循環。在傳遞引用時,它會將當前值存儲在數組中,即迭代器中的最後一個值。