Java对象的JSONPath解析器

塞巴斯蒂安·巴斯

如何通过应用JSONPath表达式从Java对象而不是JSON字符串中获取值?


我收到了从JSON字符串创建的Java对象(通过Jackson,无法影响它):

public class MyJSONInputClass {
    private String foo;
    private int[] bar = { 1, 5, 9 };
    private OtherClass baz;
    ....
}

我还具有一些JSONPath表达式,例如反映对象中值的Java字符串(它们可能要复杂得多):

"$.foo"
"$.bar[5]"
"$.baz.someProperty"

我想使用生成的java对象(解组后为MyJSONInputClass的实例)解析这些表达式:

public Object resolve(MyJSONInputClass input, String expression) {
    ...
}
塞巴斯蒂安·巴斯

我用ObjectMapper杰克逊创建一个Map<String, Object>从给定的Java对象(含有其他地图如原始类型不解析的属性)。然后,JSONPath可以读取它并评估表达式。

public Object resolve(Object input, String expression) {
    // Get the mapper with default config.
    ObjectMapper mapper = new ObjectMapper();

    // Make the object traversable by JSONPath.
    Map<String, Object> mappedObject = mapper.convertValue(input, Map.class);

    // Evaluate that expression
    Object output = JsonPath.read(mappedObject, expression);

    return output;
}

依赖项包括:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>1.2.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.4</version>
</dependency>

一些注意事项:

  • 适用于分层对象。
  • 未测试圆形结构。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建消息对象解析器

来自分类Dev

Java JSON简单解析器

来自分类Dev

解析器中的Java异常处理

来自分类Dev

Java Sax解析器错误

来自分类Dev

Java android JsonArray解析器

来自分类Dev

容错Java xml解析器

来自分类Dev

Java解析器时间问题

来自分类Dev

java中的javascript解析器

来自分类Dev

使用Java中的dom解析器将xml文件转换为json对象

来自分类Dev

解析Java代码模板时速度解析器崩溃

来自分类Dev

Ansible JSON解析器可查询多个对象值

来自分类Dev

使用req.body解析器的POST对象数组

来自分类Dev

算术解析器

来自分类Dev

对话解析器

来自分类Dev

OsmInEdit的解析器

来自分类Dev

对话解析器

来自分类Dev

WikiRank 解析器

来自分类Dev

Java-XML解析器和下载器

来自分类Dev

Java-XML解析器和下载器

来自分类Dev

如何强制`.andExpect(jsonPath()`)返回Long / long而不是int以获取杰克逊解析器的int数

来自分类Dev

参数解析器之后的Java手动验证

来自分类Dev

AST解析器获取Java类的名称

来自分类Dev

Java字节码是否有通用解析器?

来自分类Dev

Java API中的条件字符串解析器?

来自分类Dev

用Java分隔协议解析器和处理程序

来自分类Dev

不会更改标签的Java HTML解析器

来自分类Dev

Java SAX解析器命名空间引发NullPointerException

来自分类Dev

java html解析器,用于读取javascript生成的内容

来自分类Dev

Java中的XML JDOM解析器中的OutOfMemoryError