简体   繁体   English

在JsonObject中循环值

[英]Looping values in JsonObject

I have given myself a task to loop values inside an JsonObject ; 我给了自己一个任务,可以在JsonObject内循环值; for instance, I want my json to look like this: 例如,我希望我的json看起来像这样:

{
        "cusEmail": "...",
        "totalQuantity": 11,
        "totalCost": 296.89,
        "phoneNumber": "844 463 9211",
        "address": "...",
        "closeShop": "...",
        "contact": "By email: and phone call::",
        "status": "...",
        "orderDate": "2017-15-12",
        "deliveryDate": "2017-12-18",
        "orderedItems": [
            {
                "name": "Blue Ribbon",
                "manufacture": "Blue Ribbon Brown Plus Low Gi Bread 700g",
                "price": 13.99,
                "image": "data:image/jpeg;base64,..."
                "count": 1
            },
            {
                "name": "Cheese",
                "manufacture": "Galbani Mozzarella Cheese 300g",
                "price": 49.99,
                "image": "data:image/octet-stream;base64,..."
                "count": 1
            }
        ]
}

And I have written this: 而且我写了这个:

int cartSize = ShoppingCartController.getInstance().myProducts.size();

    String[] nameString = new String[cartSize];
    String[] imageString = new String[cartSize];
    Integer[] qauntityInteger = new Integer[cartSize];
    String[] manufactureString = new String[cartSize];
    Double[] priceDouble = new Double[cartSize];

    JsonObjectBuilder jsonObject = null;

    for ( int i = 0; i < cartSize; i++ ){

        Item myProducts = ShoppingCartController.getInstance().myProducts.get(i);

        nameString[i] = myProducts.getName();
        manufactureString[i] = myProducts.getManufacture();
        priceDouble[i] = myProducts.getPrice();
        imageString[i] = myProducts.getImage();
        qauntityInteger[i] = myProducts.getQuantity();

         jsonObject = Json.createObjectBuilder()
                 .add("name", nameString[i])
                 .add("manufacture", manufactureString[i])
                 .add("price", priceDouble[i])
                 .add("image", imageString[i])
                 .add("count", qauntityInteger[i]);

    }



    JsonObject jsonParams = Json.createObjectBuilder()
                    .add("cusEmail", email)
                    .add("totalQuantity", quantity)
                    .add("totalCost", totalCost)
                    .add("phoneNumber", phoneNumber)
                    .add("address", address)
                    .add("closeShop", closeShop)
                    .add("contact", contact)
                    .add("status", "ordered")
                    .add("orderDate", dateFormat.format(orderDate))
                    .add("deliveryDate", delDate)
                    .add("orderedItems", Json.createArrayBuilder()
                            .add(jsonObject))
            .build();

Of course jsonObject will return the last object of the loop, which will then be added alone . 当然的JSONObject将返回循环,这将被单独添加的最后一个对象。

How will I loop and add all objects into my arrayBuilder? 如何循环并将所有对象添加到我的arrayBuilder中?

JSONObject cart = new JSONObject();
        cart.put("cusEmail", email);
        cart.put("totalQuantity", quantity);
        cart.put("totalCost", totalCost);
        cart.put("phoneNumber", phoneNumber);
        cart.put("address", address);
        cart.put("closeShop", closeShop);
        cart.put("contact", contact);
        cart.put("status", "ordered");
        cart.put("orderDate", dateFormat.format(orderDate));
        cart.put("deliveryDate", delDate);

        JSONArray objects = new JSONArray();
        JSONObject obj;
        for (int i = 0; i < 5; i++) {
            obj = new JSONObject();
            obj.put("name", nameString[i]);
            obj.put("manufacture", manufactureString[i]);
            obj.put("price", priceDouble[i]);
            obj.put("image", imageString[i]);
            obj.put("count", qauntityInteger[i]);

            objects.add(obj);
        }
        cart.put("orderedItems", objects);

You need to create the array builder first, add all json objects, and then build the array and add it to the root object: 您需要首先创建数组构建器,添加所有json对象,然后构建数组并将其添加到根对象:

JsonArrayBuilder array = Json.createArrayBuilder();

for ( int i = 0; i < cartSize; i++ ){
    ...

     array.add(Json.createObjectBuilder()
             .add("name", nameString[i])
             .add("manufacture", manufactureString[i])
             .add("price", priceDouble[i])
             .add("image", imageString[i])
             .add("count", qauntityInteger[i]));

}

JsonObject jsonParams = Json.createObjectBuilder()
                .add("cusEmail", email)
                .add("totalQuantity", quantity)
                .add("totalCost", totalCost)
                .add("phoneNumber", phoneNumber)
                .add("address", address)
                .add("closeShop", closeShop)
                .add("contact", contact)
                .add("status", "ordered")
                .add("orderDate", dateFormat.format(orderDate))
                .add("deliveryDate", delDate)
                .add("orderedItems", array.build())
        .build();

Looking at the example in the docs , you can have a JsonArrayBuilder , to which you can add your JsonObjects, like: 查看docs中的示例,您可以拥有一个JsonArrayBuilder ,可以在其中添加JsonObjects,例如:

JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
arrayBuilder.add(jsonObject);

Then, add the array to the final JsonObject, like: 然后,将数组添加到最终的JsonObject中,如下所示:

JsonObject jsonParams = Json.createObjectBuilder()
                    .add("cusEmail", email)
                    ...
                    .add("orderedItems", arrayBuilder.build());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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