例如,我想生成一个 json 字符串ng-style
:
<th ng-style="{width:247}" data-field="code">Code</th>
但是对于杰克逊,结果是:
<th ng-style="{"width":247}" data-field="code">Code</th>
这并不容易阅读。
所以我希望杰克逊生成带单引号或不带引号的 json 字符串。是否有可能做到这一点?
例如,我想生成一个 json 字符串ng-style
:
<th ng-style="{width:247}" data-field="code">Code</th>
但是对于杰克逊,结果是:
<th ng-style="{"width":247}" data-field="code">Code</th>
这并不容易阅读。
所以我希望杰克逊生成带单引号或不带引号的 json 字符串。是否有可能做到这一点?
如果您可以控制该ObjectMapper
实例,则将其配置为以您想要的方式处理和生成 JSON:
final ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
JsonGenerator.Feature.QUOTE_FIELD_NAMES
已弃用,您可以改用它:
mapper.configure(JsonWriteFeature.QUOTE_FIELD_NAMES.mappedFeature(), false);
mapper.configure(JsonReadFeature.ALLOW_UNQUOTED_FIELD_NAMES.mappedFeature(), true);
请注意,JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES
不推荐使用(截至目前),JsonReadFeature
此处提到的相应内容只是为了完整性。
最简单也是最好的选择是使用正则表达式并更新字符串值。
示例代码如下所示。
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);
}