【问题标题】:convert list to json using Jackson使用 Jackson 将列表转换为 json
【发布时间】:2017-06-28 12:21:33
【问题描述】:

使用以下代码,我已将列表转换为 json,但格式为 如下:

{"GodownMaster":[{"pname":"FCI CHARLAPALLI","pcode":"16042"},
{"pname":"MLS CIRCLE 1 L.B. NAGAR","pcode":"16016"},{"pname":"MLS CIRCLE 4 
AZAMABAD","pcode":"16003"},{"pname":"MLS CIRCLE 6 
VIDYANAGAR","pcode":"16005"},{"pname":"OTHERS","pcode":"1699"}]} 

但我想将其转换为:

[{"pname":"FCI CHARLAPALLI","pcode":"16042"},
{"pname":"MLS CIRCLE 1 L.B. NAGAR","pcode":"16016"},{"pname":"MLS CIRCLE 4 
AZAMABAD","pcode":"16003"},{"pname":"MLS CIRCLE 6 
VIDYANAGAR","pcode":"16005"},{"pname":"OTHERS","pcode":"1699"}] 

下面是我的弹簧控制器:

@RequestMapping("/getGodowns")
public @ResponseBody Map 
getGodownsBasedOnDistrict(@RequestParam(value="district_code") String 
dist_code) {

List<CscGodownBean> godown_list = null;
Map<String, List<CscGodownBean>> m = new HashMap();
String exception = null;
try
{
//getting name and codes here
godown_list = scm_service.getGodownListBesedOnDistCode(dist_code);
}catch(Exception ex)
{
ex.printStackTrace();
exception = ex.getMessage();
}

if(godown_list!=null) {
for(int i=0;i<godown_list.size();i++) {
m.put("GodownMaster",godown_list);
}
}
return m;
}

【问题讨论】:

    标签: json spring rest


    【解决方案1】:

    您为什么要将您的列表放入Map?代码看起来很奇怪。如果你想返回一个列表,就这样做吧:

    @RequestMapping("/getGodowns")
    public @ResponseBody List<CscGodownBean> getGodownsBasedOnDistrict(@RequestParam(value="district_code") String dist_code) {
        List<CscGodownBean> godown_list = null;
        String exception = null;
        try {
            //getting name and codes here
            godown_list = scm_service.getGodownListBesedOnDistCode(dist_code);
        } catch (Exception ex) {
            ex.printStackTrace();
            exception = ex.getMessage();
        }
        return godown_list;
    }
    

    【讨论】:

    • 我想返回上面提到的json数组格式,而不是列表
    • List 将被转换为 json 数组。试试看
    • 正如@Leffchik 提到的,List 是自然映射到 JSON 数组的 Java 结构之一。另一方面,Map 不会自然地映射(双关语)到 JSON 数组,因为您必须丢弃所有键。
    • @Leffchik,这就是我要问的,我已将其转换为 {"GodownMaster":[{"pname":"FCI CHARLAPALLI","pcode":"16042"}]} 但我想要它为 [{"pname":"FCI CHARLAPALLI","pcode":"16042"}], [{"pname":"FCI CHARLAPALLI123","pcode":"16042123"}] 这意味着我只想移除 {"GodownMaster": }
    • 请考虑在否决其他答案时添加解释性评论:)
    【解决方案2】:

    将返回结果从Map更改为List&lt;CscGodownBean&gt;并输入:retrun godown_list 所以;

    @RequestMapping("/getGodowns")
    public @ResponseBody List<CscGodownBean>
    getGodownsBasedOnDistrict(@RequestParam(value="district_code") String 
    dist_code) {
    
    List<CscGodownBean> godown_list = new ArrayList<CscGodownBean>();
    String exception = null;
    try
    {
        //getting name and codes here
        godown_list = scm_service.getGodownListBesedOnDistCode(dist_code);
    }catch(Exception ex)
    {
       ex.printStackTrace();
       exception = ex.getMessage();
    }
    
    return godown_list ;
    }
    

    更新

    你可以将结果作为字符串返回,你会得到你需要的:

    @RequestMapping("/getGodowns")
    public @ResponseBody String
    getGodownsBasedOnDistrict(@RequestParam(value="district_code") String 
    dist_code) {
    
    List<CscGodownBean> godown_list = new ArrayList<CscGodownBean>();
    String exception = null;
    try
    {
        //getting name and codes here
        godown_list = scm_service.getGodownListBesedOnDistCode(dist_code);
    }catch(Exception ex)
    {
       ex.printStackTrace();
       exception = ex.getMessage();
    }
    ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
        String arrayToJson = objectMapper.writeValueAsString(godown_list);
        System.out.println("Convert List to JSON :");
        System.out.println(arrayToJson);
    
    return arrayToJson ;
    }
    

    返回的String是json格式。

    【讨论】:

    • 不是列表,我想将列表转换为 json 数组格式,例如 [{"pname":"FCI CHARLAPALLI","pcode":"16042"}, {"pname":"MLS CIRCLE 1 L.B. NAGAR","pcode":"16016"},{"pname":"MLS CIRCLE 4 AZAMABAD","pcode":"16003"},{"pname":"MLS CIRCLE 6 VIDYANAGAR","pcode": "16005"},{"pname":"OTHERS","pcode":"1699"}]
    • 那么我认为只返回 Map 返回类型的列表是不可能的。
    • 列表将自动转换为 JSON 与 Jackson
    • @TouzeneMohamedWassim,我已将其转换为 {"GodownMaster":[{"pname":"FCI CHARLAPALLI","pcode":"16042"}]} 但我希望它为 [{" pname":"FCI CHARLAPALLI","pcode":"16042"}], [{"pname":"FCI CHARLAPALLI123","pcode":"16042123"}] 这意味着我只想删除 {"GodownMaster": }
    • 我已经更新了我的答案。如果您需要什么,请告诉我。
    【解决方案3】:

    这是我用过的:

    @RequestMapping("/alluserreportJSON")
    public @ResponseBody String getusersJSON() {
        ObjectMapper objectMapper = new ObjectMapper();
        //Set pretty printing of json
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
        List<AppUser> userlist = null;
        @SuppressWarnings("unused")
        String exception = null;
        String arrayToJson = null;
        try {
            userlist = userService.findAllUsers();
            arrayToJson = objectMapper.writeValueAsString(userlist);
        } catch (Exception ex) {
            ex.printStackTrace();
            exception = ex.getMessage();
        }
        return arrayToJson;
    }
    

    希望它可以帮助某人。你可以看到它在here 工作。

    【讨论】:

      【解决方案4】:

      您将返回类型添加为 Map,但您仍然想要相同的然后在 ajaxComplete() 中放置代码;

      var response = '{"GodownMaster":[{"pname":"FCI CHARLAPALLI","pcode":"16042"}, {"pname":"MLS CIRCLE 1 L.B. NAGAR","pcode":"16016"},{"pname":"MLS CIRCLE 4 AZAMABAD","pcode":"16003"},{"pname":"MLS CIRCLE 6 VIDYANAGAR","pcode":"16005"},{"pname":"OTHERS","pcode":"1699"}]}'
      
      
      JSON.stringify(JSON.parse(response).GodownMaster);
      

      【讨论】:

      • 我想在控制器中执行它并将输出返回为 [{"pname":"FCI CHARLAPALLI","pcode":"16042"}, {"pname":"MLS CIRCLE 1 L.B. NAGAR","pcode":"16016"},{"pname":"MLS CIRCLE 4 AZAMABAD","pcode":"16003"},{"pname":"MLS CIRCLE 6 VIDYANAGAR","pcode":" 16005"},{"pname":"OTHERS","pcode":"1699"}]
      猜你喜欢
      • 2016-06-17
      • 2019-01-06
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      相关资源
      最近更新 更多