如何让jackson使用单引号或无引号生成json字符串?

时间:2012-12-23 11:55:56

标签: json jackson double-quotes

例如,我想为ng-style生成一个json字符串:

<th ng-style="{width:247}" data-field="code">Code</th>

但是对于杰克逊,结果是:

<th ng-style="{&quot;width&quot;:247}" data-field="code">Code</th>

这不容易阅读。

所以我希望jackson使用单引号或无引号生成json字符串。有可能这样做吗?

2 个答案:

答案 0 :(得分:31)

如果您可以控制ObjectMapper实例,那么将其配置为以您希望的方式处理和生成JSON:

final ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

答案 1 :(得分:-4)

最简单和最好的选择是使用正则表达式并更新字符串值。

示例代码如下所示。

partNumberList=partNumberList.replaceAll(":", ":\"").replaceAll("}", "\"}");

完整的代码如下所示

public static void main(String[] args) throws JsonParseException, JsonMappingException, 
    IOException {
    TestJack obj = new TestJack();
    //var jsonString ='{"it":"Stati Uniti d'America"}';
    //            jsonString =jsonString.replace("'", "\\\\u0027")
    ObjectMapper mapper = new ObjectMapper();
    String partNumberList = "[{productId:AS101R}, {productId:09902007}, {productId:09902002}, {productId:09902005}]";
    partNumberList = partNumberList.replaceAll(":", ":\"").replaceAll("}", "\"}");
    System.out.println(partNumberList);
    mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
    List<ProductDto> jsonToPersonList = null;
    jsonToPersonList = mapper.readValue(partNumberList, new TypeReference<List<ProductDto>>() {
    });
    System.out.println(jsonToPersonList);
}