简体   繁体   English

在java中从列表转换为json

[英]convert from list to json in java

I have a list and I want to convert it to json. 我有一个列表,我想将其转换为json。

Here is my code 这是我的代码

JqGridModel gridModel1 = new JqGridModel();
Date FromDate = new Date("1996-07-04");
Date ToDate = new Date("1996-07-05");
gridModel1.setOrderID(10248);
gridModel1.setFromDate(FromDate);
gridModel1.setToDate(ToDate);
gridModel1.setCustomerID("WILMK");
gridModel1.setShipName("Vins et alcools Chevalier");

JqGridModel gridModel2 = new JqGridModel();
Date FromDate2 = new Date("1996-07-04");
Date ToDate2 = new Date("1996-07-05");
gridModel2.setOrderID(10248);
gridModel2.setFromDate(FromDate2);
gridModel2.setToDate(ToDate2);
gridModel2.setCustomerID("WILMK");
gridModel2.setShipName("Vins et alcools Chevalier");



List jqGridModels = new ArrayList();
jqGridModels.add(gridModel1);
jqGridModels.add(gridModel2);

And I want to convert it to be in the following format: 我想将其转换为以下格式:

{ 
    "rows":[
        {"OrderID":"10248","FromDate":"1996-07-04","CustomerID":"WILMK","ShipName":"Vins et alcools Chevalier","ToDate":"1996-07-05"},
        {"OrderID":"10249","FromDate":"1996-07-05","CustomerID":"TRADH","ShipName":"Toms Spezialit\u00e4ten","ToDate":"1996-07-17"},
        {"OrderID":"10250","FromDate":"1996-07-08","CustomerID":"HANAR","ShipName":"Hanari Carnes","ToDate":"1996-07-26"},
        {"OrderID":"10251","FromDate":"1996-07-08","CustomerID":"VICTE","ShipName":"Victuailles en stock","ToDate":"1996-08-01"},
        {"OrderID":"10252","FromDate":"1996-07-09","CustomerID":"SUPRD","ShipName":"Supr\u00eames d\u00e9lices","ToDate":"1996-08-01"}
    ]
}

Any help would be greatly appreciated. 任何帮助将不胜感激。

Firstly: use generics 首先: 使用泛型

List jqGridModels = new ArrayList();  //bad
List<JqGridModel> jqGridModels = new ArrayList<>();  //good

Secondly: Can you use Gson? 第二:你能用Gson吗?

List<JqGridModel> jqGridModels = new ArrayList<>();

Gson gson = new Gson();
JsonElement jsElem = gson.toJsonTree(jqGridModels, new TypeToken<List<JqGridModel>>() {}.getType());

if (! jsElem.isJsonArray()) {
    //this is an error...
}

JsonArray jsonArray = jsElem.getAsJsonArray();

Haven't tested it yet but it should work, I'm doing this in my project and it's ok, if you have more troubles please tell me! 尚未测试它但它应该工作,我在我的项目中这样做,没关系,如果你有更多的麻烦请告诉我!

If you want to do it manually you can : 如果你想手动完成,你可以:

Create a method to generate the JSON from tour object : 创建一个从tour对象生成JSON的方法:

class JqGridModel{

    public JSONObject toJSON(){
        JSONObject json = new JSONObject();
        json.accumulate("OrderID", orderID);
        // DO the same for all attributes
        return  json;
    }
}

And then call this method looping on the list content : 然后在列表内容上调用此方法:

JSONObject json = new JSONObject();
JSONArray arr = new JSONArray();
for(JqGridModel m: jqGridModels){
     arr.put(m.toJSON());
}
json.accumulate("rows", arr);
    com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
    StringBuffer result = new StringBuffer("{\n\t\"rows\":[\n");
    try {
        for(Object item : jqGridModels){
            result = result.append("\t\t\t");
            result = result.append(mapper.writeValueAsString(item));
            result = result.append("\n");
        }
        if(jqGridModels.size() > 1){
            result = result.append("\t]\n}");
            System.out.print(result);
        }
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM