在Java中使用命名的JSON对象

时间:2018-06-09 20:53:06

标签: java json

我想以下列格式处理JSON文件:我想要数据 在文件中是Java中的JSONObject个对象。

但是我对这个事实感到困惑,文件中的对象有一个名字,我在网上找不到这种JSON文档的其他例子。

请建议。

{
"bazaar": {
    "21943236": {
        "cost": 69750,
        "quantity": 287
    },
    "20824133": {
        "cost": 69960,
        "quantity": 500
    },
    "21885344": {
        "cost": 69999,
        "quantity": 30
    },
    "10109747": {
        "cost": 70000,
        "quantity": 18
    }
}
}

2 个答案:

答案 0 :(得分:2)

根据您使用的库,JSONObject可能会实现Map<String, Something>

通过调用bazaar.keySet()。

,它为您提供所包含对象的所有名称

所以它会像:

JsonObject bazaar = howeverYouLikeToObtainTheBazaarObject();

for(String name : bazaar.keySet()) {
  JSONObject costQuantity = bazaar.getJsonObject(name);
  // do stuff with name and costQuantity
}

答案 1 :(得分:1)

使用起来并不复杂。例如,如果你有班级

class BazaarItem {
    String id;
    int cost;
    int quantity;

    public BazaarItem(String id, int cost, int quantity) {
        this.id = id;
        this.cost = cost;
        this.quantity = quantity;
    }
}

然后你可以解析JSON对象(我在这里使用org.json库)

String json = "your json";
JSONObject bazaar = new JSONObject(json).getJSONObject("bazaar");

然后,通过遍历键,您可以将其转换为列表

List<BazaarItem> items = new ArrayList<>(bazaar.size());
for (String key : bazaar.keys()) {
    JSONObject value = items.getJSONObject(key);

    int id = Integer.parseInt(key);
    int cost = value.getInt("cost");
    int quantity = value.getInt("quantity");
    items.add(new BazaarItem(id, cost, quantity));
}

或将其转换为地图。

Map<Integer, BazaarItem> items = new HashMap<>(bazaar.size());
for (String key : bazaar.keys()) {
    JSONObject value = items.getJSONObject(key);

    int id = Integer.parseInt(key);
    int cost = value.getInt("cost");
    int quantity = value.getInt("quantity");
    items.put(id, new BazaarItem(id, cost, quantity));
}