Skip to content

Ognl获取Json信息

约 328 字大约 1 分钟

Ognl

2025-07-30

使用 OGNL 提取 JSON 字段

OGNL(Object-Graph Navigation Language) 是一种用于访问和操作 Java 对象图的表达式语言。它最初应用于 Web 框架(如 Struts),以其简洁灵活的语法广泛用于属性取值、集合访问、条件表达式等场景。 在处理 Java 对象、Map 或 JSON 数据时,OGNL 可以用来动态访问字段,非常适合配置驱动或测试类场景。

1. 引入依赖

在 Maven 项目中添加 OGNL 依赖:


<dependency>
    <groupId>ognl</groupId>
    <artifactId>ognl</artifactId>
    <version>3.2.21</version>
</dependency>

2. 使用 OGNL 提取 JSON 字段

Ognl.getValue("key", object) 可用于动态访问对象中的属性。

OGNL 支持多种对象结构,包括 JSONObject、Map、JavaBean 等。

当 JSON 嵌套较深时,也可以使用 "user.name" 等路径表达式获取子字段的值。

下面是一个简单示例,展示如何使用 OGNL 从 JSON 中提取字段:

public void testOgnl() throws OgnlException {
    String jsonStr = "{"
            + "\"orderId\": \"123\","
            + "\"age\": \"18\","
            + "\"user\": {"
            + "  \"userId\": \"u001\","
            + "  \"userName\": \"张三\","
            + "  \"address\": {"
            + "    \"city\": \"北京\","
            + "    \"district\": \"海淀区\""
            + "  }"
            + "}"
            + "}";
    JSONObject jsonObject = JSONObject.parseObject(jsonStr);

    log.info("orderId={}", (String) Ognl.getValue("orderId", jsonObject));
    log.info("userName={}", (String) Ognl.getValue("user.userName", jsonObject));
}

3. 输出结果

运行后,控制台输出如下日志,表示成功从 JSON 中获取了 orderId 字段:

INFO  ApiTest                - orderId=123
INFO  ApiTest                - userName=张三

贡献者

  • flycodeuflycodeu

公告板

2025-03-04正式迁移知识库到此项目