我正在尝试使用以下格式创建JSON对象。
{
"tableID": 1,
"price": 53,
"payment": "cash",
"quantity": 3,
"products": [
{
"ID": 1,
"quantity": 1
},
{
"ID": 3,
"quantity": 2
}
]
}
我知道如何使用JSONObject和JSONArray静态地执行此操作。但我需要一种更动态的方式,因为产品阵列必须是 已实施,因此它有许多对象而不仅仅是2。
有没有办法删除JSONObject的内容?比如我有 关注JSONobject
{ " ID":3, "数量":2 }
我可以以某种方式擦除它的值,以便我可以在迭代中重用该对象吗?
答案 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字符串开始,然后随意操作它并将其返回到字符串。