首页 > 解决方案 > 在 JSONObject 中生成搜索值?

问题描述

我有一个非常不同的结构 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);

我想知道是否可以使用实用程序方法以更好、更通用的方式获取这些值?另外,我也想避免那些演员,有什么解决办法吗?

标签: javajson

解决方案


由于 JSON 中的键始终相同,因此您可以创建一个类并将键指定为实例变量。现在您可以使用Jackson library's Object Mapper转换为JSON stringJSON 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; }
}

Insdie 的 main 函数可以编写如下代码:

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方式你不需要做演员。你可以在这里阅读更多关于它的信息。


推荐阅读