我得到了以下json:
{
"ID": "1234567",
"dangereousCargo": true,
"numberOfPassangers": 164,
"cargo": [
{
"type": "Oil",
"amount": 8556
},
{
"type": "Chemicals",
"amount": 5593
}
]
}
从this问题,我明白可以从jsonObject中获取cargoList(如果该列表包含某种类型的对象)。但是如何从列表中获取单独的货物对象?
+ jsonstring的变量名是否必须与我的CargoClass中的变量名对应?如果jsonObject只包含类型和数量并且我的CargoClass有更多属性怎么办?
答案 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));
}
}
}
上面的代码给出了以下输出:
获得数据后,您可以随心所欲地使用它。
<强>库强>
JSONSimple - https://code.google.com/p/json-simple/