如何从jsonstring中的列表中解析自定义对象?

时间:2015-11-09 14:38:11

标签: java json list parsing

我得到了以下json:

{
    "ID": "1234567",
    "dangereousCargo": true,
    "numberOfPassangers": 164,
    "cargo": [
        {
            "type": "Oil",
            "amount": 8556
        },
        {
            "type": "Chemicals",
            "amount": 5593
        }
    ]
}

this问题,我明白可以从jsonObject中获取cargoList(如果该列表包含某种类型的对象)。但是如何从列表中获取单独的货物对象?

+ jsonstring的变量名是否必须与我的CargoClass中的变量名对应?如果jsonObject只包含类型和数量并且我的CargoClass有更多属性怎么办?

3 个答案:

答案 0 :(得分:3)

您可以迭代抛出代表您的货物清单的JSONArray(未经测试)

JSONObject json = new JSONObject(jsonString);
JSONArray cargoList = json.getJSONArray("cargo");

for(int i=0; i< cargoList.length(); i++) {
    JSONObject cargo = cargoList.getJSONObject(i);
    //Do something with cargo
}

答案 1 :(得分:1)

  

但是如何从列表中获取单独的货物对象?

String jsonString = "{ ... }";
JSONObject json = new JSONObject(jsonString);
JSONArray cargoList = json.getJSONArray("cargo");
for(JSONObject cargo : cargoList)
{
   //do something with your cargo element
}
  

jsonstring的变量名必须与   我的CargoClass中的变量名?

如果使用JSONObject中的get方法,则必须在jsonString中指定属性的确切名称。按照上面的例子:

String cargoType = cargo.getString("type");

顺便说一下,如果你想使用你已经定义的CargoClass,你需要一个Deserializer,你的JSON上的所有属性必须是所有存在的,并且在你的CargoClass上都是相同的:我建议你去看看其他的SO问题like this one

  

如果jsonObject只包含类型和数量以及我的CargoClass,该怎么办?   有更多的属性?

其他属性将在您的类声明

的基础上初始化

答案 2 :(得分:0)

使用JSON Simple可以非常轻松地从JSON中解析和读取数据。正如其他用户所说,有大量的库可以实现这一目标。以下是您的代码的测试示例。

    public static void main(String[] args) throws JSONException {
    String json = "{\n"
            + "    ID: 1234567,\n"
            + "    dangereousCargo: true,\n"
            + "    numberOfPassangers: 164,\n"
            + "    cargo: [\n"
            + "        {\n"
            + "            type: Oil,\n"
            + "            amount: 8556\n"
            + "        },\n"
            + "        {\n"
            + "            type: Chemicals,\n"
            + "            amount: 5593\n"
            + "        }\n"
            + "    ]\n"
            + "}";

    JSONObject data = new JSONObject(json);

    int id = data.getInt("ID");
    boolean danger = data.getBoolean("dangereousCargo");
    int numOfPassengers = data.getInt("numberOfPassangers");

    System.out.println("Current ID: " + id + "\n"
            + "Is Dangerous: " + danger + "\n"
            + "Number of Passengers: " + numOfPassengers + "\n");
    JSONArray cargo = data.getJSONArray("cargo");

    NumberFormat currency = NumberFormat.getCurrencyInstance();
    for (int i = 0; i < cargo.length(); i++) {
        JSONObject cargoObject = cargo.getJSONObject(i);
        String type = cargoObject.getString("type");
        double amount = cargoObject.getDouble("amount");
        System.out.println("Current Type: " + type);
        System.out.println("Current Amount: " + currency.format(amount));
    }

  }

}

上面的代码给出了以下输出:

enter image description here

获得数据后,您可以随心所欲地使用它。

<强>库

JSONSimple - https://code.google.com/p/json-simple/

GSON - https://github.com/google/gson