当前位置: 首页 > 面试题库 >

杰克逊JsonNode字符串与排序键

黄淇
2023-03-14
问题内容

我正在使用Jackson
2.2.3
,需要将JsonNode树转换为具有排序字段键的字符串。我完全不清楚如何执行此操作,尤其是由于相反的操作非常简单-
JsonNode jn = ObjectMapper.readTree(String s)

看来正确的方法是void writeTree(JsonGenerator jgen,JsonNode rootNode)。但是,我看不到String从那里获得序列化的方法JsonGenerator。我认为这SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS仍然适用,因为JsonGenerator.Features没有该选项。有没有一种更简单的方法可以执行此操作-
否则,如何从中检索序列化的字符串JsonGenerator


问题答案:

正如杰克逊的一位作者所提供的,这是最简单的方法。目前还没有任何办法从直行JsonNodeString与排序键。

private static final ObjectMapper SORTED_MAPPER = new ObjectMapper();
static {
    SORTED_MAPPER.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
}

private String convertNode(final JsonNode node) throws JsonProcessingException {
    final Object obj = SORTED_MAPPER.treeToValue(node, Object.class);
    final String json = SORTED_MAPPER.writeValueAsString(obj);
    return json;
}


 类似资料:
  • 问题内容: 它应该是如此简单,但是在尝试一个小时的尴尬之后,我只是找不到它。 我需要获取一个JSON字符串,例如,解析为。 给 问题答案: 理查兹的答案略有不同,但可以使用字符串,因此可以将其简化为:

  • 问题内容: 在Jersey上使用Jackson 处理器时,何时以及为何需要在两者之间使用注释? 杰克逊(Jackson)还提供了自己的服务提供商以直接使用。这种方法缺少什么?还是为什么我比其他人更喜欢 ps:我也用弹簧 问题答案: 为了生成JSON,通常只需指定即可。但是,这将默认采用JAXB路由。 使用Object-> JAXB-> JSON,您必须注释要映射的类。这可以很好地工作,但是一旦您要

  • 问题内容: 我有一个这样的模型: 例如,我从远程获取以下JSON: 当我反序列化此JSON时,and 变量将获得正确的值。但是我不想解释我变量的内容。相反,我希望它是以下字符串: 之后,我将自己解释。我如何获得的价值? 问题答案: Jackson问题596是为原始问题中描述的所需功能而创建的。如果要实施它,请投票。 当前可用的解决方案是实现自定义反序列化处理。 另外,如何使用Jackson将原始J

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • Java Jackson能否将一个json字符串date反序列化成Java Long字段(从epoch开始的毫秒数)? 这是一个要反序列化的json字段的示例: 这是Java类中的同一字段,带有当前注释: 但是,发生异常: com . faster XML . Jackson . databind . exc . invalidformatexception:无法从字符串“2022-01-02T0

  • 问题内容: 我需要反序列化JSON对象并以不区分大小写的方式访问字段。例: 这需要高效,因此调用和简化结果并不是一个好的解决方案。 问题答案: 没有自动的方法,但是您可以通过创建自定义的JsonNodeFactory来创建自定义的ObjectNodes,然后可以覆盖用于添加和访问条目的方法。