我正在编写一个JSP webapp,现在我有点陷入困境。我一直在使用Java对象的ArrayList,每个都有一个属性列表。它们是具有firstName,lastName等属性的Order对象。在我的开发中,我需要将各个订单作为JSON数组存储在javascript变量中。我可以使用servlet将arraylist转换为JSON,但JSON具有每个Order对象的重复属性,如下所示:
[{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);
答案 0 :(得分:0)
尝试遍历数组列表,为每个对象创建一个JSON对象,而不是整个转换数组列表。
答案 1 :(得分:0)
假设您的订单实体是这样的:
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:
orders.forEach (order -> System.out::println);
答案 2 :(得分:0)
以下是使用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
答案 3 :(得分:0)
通过ssc回答是正确的。最好的方法是遍历列表。