简体   繁体   中英

java convert to json object

i working on SpringMVC framework. i have JSonController for return String object like this

@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();
}

i don't know why object in restaurantArray and productArray are duplicate. 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
}

thanks everyone, sorry for my English.

solve!! i just move JsonObject into loop

@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();
}

thanks everyone again.

When you do this :

for (Restaurant restaurant : restaurantList)

it generates an iterator and loops via it. As you are passing the reference, it stores the current value in array ie last value in the iterator.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM