Java 在JSONObject中生成搜索值?

Java 在JSONObject中生成搜索值?,java,json,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 = (i

我有一个非常不同的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);
String val1=((LinkedHashMap)response.get(“key1”)).get(“internal_key1”);
字符串val2=((LinkedHashMap)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);

我想知道我是否可以使用一种实用的方法,以更好、更通用的方式获得这些值?另外,我也希望避免这些强制转换,有什么解决方案吗?

因为JSON中的键总是相同的,所以您可以创建一个类并将键指定为实例变量。现在,您可以使用
Jackson库的对象映射器
JSON字符串
转换为
JSON对象
,如下代码所示

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();
}
另外,使用
对象映射器
不需要进行强制转换。
您可以阅读更多信息。

您可以使用谷歌提供的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); }
}

然后你就可以走了。还有一个名为Jackson的库,它为GSON提供了类似的解决方案

如何使用JSONObject?即使JSONObject具有不同的结构,您是否始终使用相同的字段?能否在json中存储一些类型信息?@YugSingh正如您在示例中看到的,这正是我使用JSONObject的方式。键总是相同的,但值当然不同。@Charles不,我不能在“响应”中存储任何内容。我从服务器上获取这个JSON。
  Example ex = new Gson().fromJson(response.toString(), Example .class);