我有一个非常不同的结构JSONObject。我正在使用json.simple从这样的对象获取值:
String val1 = ((LinkedHashMap<String, String>) response.get("key1")).get("inner_key1");
String val2 = ((LinkedHashMap<String, String>) response.get("key1")).get("inner_key2");
int index1 = (int) ((ArrayList) response.get("index_key1")).get(0);
int index2 = (int) ((ArrayList) response.get("index_key2")).get(0);
int index3 = (int) ((ArrayList) response.get("index_key3")).get(0);
我想知道是否可以使用实用程序方法以更好,更通用的方式获取这些值?另外,我也想避免这些转换,是否有解决方案?
答案 0 :(得分:1)
由于JSON中的键始终相同,因此您可以创建一个类并将这些键指定为实例变量。现在,您可以使用Jackson library's Object Mapper
将JSON string
转换为JSON Object
,如下面的代码所示。
public class Vehicle{
private String brand = null;
private int doors = 0;
public String getBrand() { return this.brand; }
public void setBrand(String brand){ this.brand = brand;}
public int getDoors() { return this.doors; }
public void setDoors (int doors) { this.doors = doors; }
}
插入主要功能,您可以编写以下代码:
ObjectMapper objectMapper = new ObjectMapper();
String carJson =
"{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
try {
Vehicle vehicle= objectMapper.readValue(carJson, Vehicle.class);
System.out.println("car brand = " + vehicle.getBrand());
System.out.println("car doors = " + vehicle.getDoors());
} catch (IOException e) {
e.printStackTrace();
}
此外,您可以使用Object Mapper
方式进行投射。
您可以详细了解here。
答案 1 :(得分:1)
您可以使用Google提供的GSON库将JSON映射到Java。
一个例子,
public class Example {
private String val1;
private String val2;
private ArrayList<int> index_key1;
private ArrayList<int> index_key2;
private ArrayList<int> index_key3;
///
// Getter Methods
///
public String getVal1() { return val1; }
public String getVal2() { return val2; }
public int getIndex1() { return index_key1.get(0); }
public int getIndex2() { return index_key2.get(0); }
public int getIndex3() { return index_key3.get(0); }
}
然后
Example ex = new Gson().fromJson(response.toString(), Example .class);
之后,您应该会很好。还有一个名为Jackson的库,它提供了与GSON类似的解决方案。