繁体   English   中英

一个 map 的<string, object>转 JSONString</string,>

[英]A map of <String, Object> to JSONString

             ObjectMapper mapper = new ObjectMapper();

         searchCriteria.put(TICKET_STATUS_LIST,
                 mapper.writeValueAsString(ticketStatus));

         String ticketListJson = mapper.writeValueAsString(tkmTicketList);
         String searchCrteriaJson = mapper
                 .writeValueAsString(searchCriteria);

         Map<String, Object> ticketSearchResult = new HashMap<String, Object>();

         ticketSearchResult.put("ticketListJson", ticketListJson);
         ticketSearchResult.put("searchCriteriaJson", searchCrteriaJson);
         ticketSearchResult.put("count", iResultCt);

         return mapper.writeValueAsString(ticketSearchResult);

我遇到了这个令人愉快的代码,问题是搜索条件和 ticketListJson 最终被视为字符串,所以我得到了一个糟糕的 json:

{"count":7,"searchCriteriaJson":"{\"startRecord\":0,\"sortOrder\":\"DESC\",\"ticketStatus\":\"[\\\"Any\\\"]\",\"pageSize\":10,\"sortBy\":\"Default\",\"customer\":1599}","ticketListJson":"[{\"id\":\"30\",\"subject\":\"Test\",\"number\":\"TIC-30\",...

我怎样才能让这些内部 json 字符串保持它们的正常值而不添加一堆转义字符。

只需将searchCriteriatkmTicketList对象直接放入ticketSearchResult map 中,而不是多次通过writeValueAsString方法。 Jackson 将遍历 Map 并序列化它遇到的对象。

如果你需要对那些其他对象的序列化做一些更复杂的事情,你可以这样做:(我先写了,然后意识到这对你需要的东西来说太过分了)

searchCriteriatkmTicketList转换为 JSON 树节点而不是字符串,然后它们将包含在搜索结果 JSON 中而不是重新转义为字符串:

JsonNode searchCriteriaJson = mapper.convertValue(searchCriteria, JsonNode.class)

不要多次调用writeValueAsString() ticketStatustkmTicketListsearchCriteria直接插入到地图中。

ObjectMapper mapper = new ObjectMapper();

searchCriteria.put(TICKET_STATUS_LIST, ticketStatus);

Map<String, Object> ticketSearchResult = new HashMap<String, Object>();

ticketSearchResult.put("ticketListJson", tkmTicketList);
ticketSearchResult.put("searchCriteriaJson", searchCriteria);
ticketSearchResult.put("count", iResultCt);

return mapper.writeValueAsString(ticketSearchResult);

暂无
暂无

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

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