如何将对象的ArrayList转换为单独的JSON对象
问题描述:
我正在编写一个JSP Web应用程序,现在我有点卡住了。我一直在使用Java对象的ArrayList,每个对象都有一个属性列表。它们是具有像firstName,lastName等属性的Order对象。在我的开发中的这一点上,我需要将各个订单作为JSON数组存储在JavaScript变量中。我可以使用servlet将ArrayList转换为JSON,但JSON具有每个Order对象的重复属性,如下所示:如何将对象的ArrayList转换为单独的JSON对象
[{firstName:Mike,lastName:Daniels,..... firstName:John ,lastName:Doe ... etc ...}]
显然,JSON是由我所有的Order对象组成的,它们串成一个JSON数组。我想知道的是,我需要根据当时应用程序中的订单数量将字符串拆分为单独的变量。
下面是对象如何设置的方法。谢谢!
Object orders = request.getSession().getAttribute("orders");
//this is a string of order properies/values
String json = new Gson().toJson(orders);
HttpSession session = request.getSession();
session.setAttribute("jsonOrders", json);
答
尝试遍历数组列表,为每个对象创建一个JSON对象,而不是整个转换数组列表。
答
我们假设你的订单实体是这样的:
public class Order {
private String firstName;
private String lastName;
// getters & setters
}
,你会得到你的订单数据像请求:
[{
"firstName": "Mike",
"lastName": "Daniels"
}, {
"firstName": "John",
"lastName": "Doe"
}]
你应该能够使用
将其转换为List<Order>
List<Order> orders = gson.fromJson(response, Order.class);
然后,您可以遍历该列表:
for (Order order: orders) {
// Whatever you want to do
}
,
或者,如果你使用的是Java 8:SSC
orders.forEach (order -> System.out::println);
答
下面是使用GSON库解决方案,
//Order.java
public class Order {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
//Orders.java
public class Orders {
Order[] order;
public Order[] getOrder() {
return order;
}
public void setOrder(Order[] order) {
this.order = order;
}
}
import com.google.gson.Gson;
//Solution.java
public class Solution {
public static void main(String[] args) {
String json = "{\"order\":[{\"firstName\":\"Mike\",\"lastName\":\"Daniels\"},{\"firstName\":\"John\",\"lastName\":\"Doe\"}]}";
Orders orders = new Gson().fromJson(json, Orders.class);
Order[] orderArr = orders.getOrder();
for(int i=0; i<orderArr.length;i++){
System.out.println("First Name : "+ orderArr[i].getFirstName());
System.out.println("Last Name "+orderArr[i].getLastName());
}
}
}
**Output**
First Name : Mike
Last Name Daniels
First Name : John
Last Name Doe
答
答案看起来正确。最好的方法是遍历列表。