生成JSONObject中的搜索值?

时间:2018-10-06 18:30:41

标签: java json

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

我想知道是否可以使用实用程序方法以更好,更通用的方式获取这些值?另外,我也想避免这些转换,是否有解决方案?

2 个答案:

答案 0 :(得分:1)

由于JSON中的键始终相同,因此您可以创建一个类并将这些键指定为实例变量。现在,您可以使用Jackson library's Object MapperJSON 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类似的解决方案。