如何将json字符串转换为java对象。

4
从jsp通过ajax调用传递json字符串到服务器,我将其转换为json对象。如何将json对象转换为Java模型类对象?
在服务器上,我正在执行以下操作:
 HttpServletRequest request = ServletActionContext.getRequest();
 String jsonData = request.getParameter("JsonData");
 JSONObject jsonDataObject = (JSONObject) JSONSerializer.toJSON( jsonData );

我的模型类看起来像这样:

   public class Vehicles {

private List<Vehicle> vehicle;

public List<Vehicle> getVehicle() {
    return vehicle;
}

public void setVehicle(List<Vehicle> vehicle) {
    this.vehicle= vehicle;
}

    }

并且
  public class Vehicle{
    private Integer vId;
   private String VName;
    private List<Department> department;
   //getters and setters;
    }

并且

  public class Department{
    private Integer depId;
private String departmentName;
private List<Item> item;
   //getters and setters
   }

并且

  public class Item{
  private Integer itemId;
  private String itemName;
  //getters and setters
   }

我正在得到一个jsonData字符串,其内容为:

{"vehicles":[{"vehicle":[{"department":[{"Item":[{"itemId":31,"itemName":"c7"},{"itemId":32,"itemName":"c2"}],"depId":21,"departmentName":"d1"}],"vId":11,"VName":"aaa"},{"department":[{"Item":[{"itemId":33,"itemName":"c3"},{"itemId":34,"itemName":"c4"}],"depId":22,"departmentName":"d2"},{"Item":[{"itemId":36,"itemName":"c1"}],"depId":24,"departmentName":"d3"}],"vId":12,"VName":"bbbb"},{"department":[{"Item":[{"itemId":30,"itemName":"c6"},{"itemId":35,"itemName":"c5"}],"depId":23,"departmentName":"d4"}],"vId":13,"VName":"cccc"},{"department":[{"Item":[{"itemid":37,"itemName":"c8","status":0}],"depId":25,"departmentName":"d5"}],"vId":14,"VName":"ddd"}]}]}

如何在Java中将JSONObject jsonDataObject(或String jsonData)转换为模型类对象(即vehicles)?


请确保您已经使用JsonConfig配置了序列化器,然后您可以使用JSONSerializer.toJava - obataku
我想建议使用Gson API。 - KV Prajapati
1
这看起来像是一个重复的问题:https://dev59.com/gXM_5IYBdhLWcg3wZSPX?rq=1 - Anderson Green
@AndersonGreen 我认为这不是完全重复的问题。那个问题问如何将JSON字符串转换为简单的“Object”;而这个问题问如何将JSON字符串转换为特定类型的类对象。那个问题很高兴最终得到一个JSONObject;而这个问题想要一个Vehicle - apsillers
2个回答

5
使用这个...
  import org.codehaus.jackson.map.ObjectMapper;
  import org.json.JSONException;
  import org.json.JSONObject; 


HttpServletRequest request = ServletActionContext.getRequest();
Vehicles vehicles;
String jsonData = request.getParameter("JsonData");
jsonData = jsonData.substring(13, jsonData.length()-2);
ObjectMapper mapper = new ObjectMapper();
try{
    vehicles= mapper.readValue(jsonData, Vehicles.class);
}
catch (Exception e) {
    e.printStackTrace();
}

如果他有一组车辆呢? - Dejell
我不知道 subString json 字符串的目的是什么。我们可以使用 ObjectMapper 直接将 JSON 字符串映射到相应的 pojo 类。 - Mohanraj

1

对于转换(String jsonData),我更喜欢使用Gson

就像这样,

 Gson gsonObj = new Gson();
 Vehicles vehicles = gsonObj.fromJson(jsonData, Vehicles.class);
 iterate through this list

  1. 项目必须是“item”,因为在Item pojo中,您将item作为实例变量。
  2. 不需要{"vehicles":[,因为您的Vehicles pojo只有vehicle作为实例变量。更改这些,您就可以让它正常工作了。
- Gopi Shankar
然后创建一个名为BaseVehicles的类,将List<Vehicles> vehicles作为实例变量,并尝试解析。 - Gopi Shankar
BaseVehicles baseVehicles = gsonObj.fromJson(jsonData, BaseVehicles.class); 在BaseVehicles中创建了一个带有getter和setter的List<Vehicles>,但是baseVehicles仍然显示为null值。 - subbusaabu
确保JSON字符串中的键和POJO实例变量的大小写相同,这样就可以正常工作。 - Gopi Shankar
JSONObject jsonDataObject = (JSONObject) JSONSerializer.toJSON( jsonData ); String value = jsonDataObject.getString("vehicles"); Vehicles vehicles= gsonObj.fromJson(value, Vehicles.class); 我尝试了这样做,但它仍然抛出异常:预期的是BEGIN_OBJECT,但在第1行第2列却是BEGIN_ARRAY。 - subbusaabu
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接