动态创建JSON对象

时间:2017-07-11 19:47:46

标签: java android json

我正在尝试使用以下格式创建JSON对象。

{
"tableID": 1,
"price": 53,
"payment": "cash",
"quantity": 3,
"products": [
    {
        "ID": 1,
        "quantity": 1
    },
    {
        "ID": 3,
        "quantity": 2
    }
]

}

  1. 我知道如何使用JSONObject和JSONArray静态地执行此操作。但我需要一种更动态的方式,因为产品阵列必须是 已实施,因此它有许多对象而不仅仅是2。

  2. 有没有办法删除JSONObject的内容?比如我有 关注JSONobject

    {     " ID":3,     "数量":2 }

  3. 我可以以某种方式擦除它的值,以便我可以在迭代中重用该对象吗?

5 个答案:

答案 0 :(得分:3)

对于你的第一个问题,你可以像这样动态地构建上面的json。

JSONObject jsonObject = new JSONObject();
jsonObject.put("tableID", 1);
jsonObject.put("price", 53);
jsonObject.put("payment", "cash");
jsonObject.put("quantity", 3);

JSONArray products = new JSONArray();

//product1
JSONObject product1 = new JSONObject();
product1.put("ID", 1);
product1.put("quantity", 1);
products.put(product1); //add to products

//product3
JSONObject product3 = new JSONObject();
product3.put("ID", 3);
product3.put("quantity", 2);
products.put(product3); //add to products

jsonObject.put("products", products); //add products array to the top-level json object

对于第二个问题,如果您知道其名称,则可以删除JSONObject的元素。

jsonObject.remove("tableID"); // remove the tableID key/value pair

或者如果你想删除JSONArray的特定元素,那么你必须知道它在集合中的位置

jsonObject.getJSONArray("products").remove(1); //removes the second item in the collection which is the product3

答案 1 :(得分:2)

尝试将JSON数据构造为字符串:

String json = "{" +
            "\"tableID\": 1," +
            "\"price\": 53," +
            "\"payment\": \"cash\"," +
            "\"quantity\": 3," +
            "\"products\": [";

for (int i = 0; i < 100; i++) {
    json += "{ \"ID\": 3, \"quantity\": 2 }";
    if(i != 100) json += ",";    
}

json += "]}";

然后创建您的JSONObject:

JSONObject jsonObject = new JSONObject(json);

我不知道你究竟想做什么,但我猜这是下面的事情:

for(int i = 0; i < products.size(); i++) {
    json += "{" +
          "\"ID\": " + products.get(i).getId() + "," +
          "\"quantity\": " + products.get(i).getQuantity() + " }";
    if(i != products.size() - 1) json += ",";
}

注意:请参阅kws的answer以获得更易读的方法。

答案 2 :(得分:0)

是的,作为一个对象,您可以更改其内容。回答你的问题,就是这样。

JSONArray jsArray = (JSONArray) json.get("products");

JSONObject js1 = jsArray.getJSONObject(0);
System.out.println("0: "+js1);
jsArray.remove(0);

JSONObject js2 = jsArray.getJSONObject(0);
System.out.println("1: "+js2);
jsArray.remove(0);

因此,您可以根据您的偏好重复该数组或将其放入列表

答案 3 :(得分:0)

第一个问题

您可以使用this website创建java类,它将创建2,一个用于属性(tableId...),另一个用于产品,并且只包含主类中的Products数组< / p>

对于第二个问题

您可以忽略它products[0]并忽略products[1](Id:3)

答案 4 :(得分:0)

Woops,我用js而不是java写了一个很长的答案。

只需使用Google的HashMap和GSON库。

见这里:How can I convert JSON to a HashMap using Gson?

您可以动态创建对象作为hashMap,添加产品并随意删除它们。然后使用toJson()方法将对象转换为JSON字符串。

(或者从使用fromJson()读入HashMap的任何JSON字符串开始,然后随意操作它并将其返回到字符串。