You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用IBM Jsonata4Java替换JSONATA表达式指向的JSON值?

使用Jsonata4Java修改JSON中Account.OrderID的值

核心思路

Jsonata是声明式的查询与转换语言,Jsonata4Java通过执行转换表达式生成修改后的JSON对象,而非直接对原JSON进行原地修改。要替换Account.OrderID的值,只需构造一个保留原JSON所有结构、仅修改目标字段的转换表达式即可。

具体步骤与代码示例

  1. 引入依赖
    确保项目中已添加Jsonata4Java及JSON处理依赖(以Maven为例):
<dependency>
    <groupId>com.ibm.jsonata4java</groupId>
    <artifactId>JSONata4Java</artifactId>
    <version>1.7.0</version> <!-- 可替换为最新稳定版本 -->
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>
  1. 编写Jsonata转换表达式
    推荐使用$merge函数,它能简洁合并原JSON结构与修改的字段,无需手动复制其他字段:
$merge([$, {"Account": {"OrderID": 1234}}])

如果需要明确控制所有字段,也可以显式构造完整JSON结构:

{
  "Account": {
    "Account Name": Account."Account Name",
    "OrderID": 1234,
    "Product": Account.Product
  }
}
  1. Java代码实现
import com.ibm.jsonata4java.Jsonata;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonataModifyDemo {
    public static void main(String[] args) throws Exception {
        // 原始JSON数据
        String originalJson = """
            {
              "Account": {
                "Account Name": "Firefly",
                "OrderID": "order104",
                "Product": [
                  {
                    "Product Name": "Bowler Hat",
                    "ProductID": 858383,
                    "SKU": "040657863",
                    "Description": {
                      "Colour": "Purple",
                      "Width": 300,
                      "Height": 200,
                      "Depth": 210,
                      "Weight": 0.75
                    },
                    "Price": 34.45,
                    "Quantity": 4
                  }
                ]
              }
            }
        """;

        // 初始化JSON解析器与Jsonata引擎
        ObjectMapper mapper = new ObjectMapper();
        JsonNode inputNode = mapper.readTree(originalJson);
        Jsonata jsonata = Jsonata.compile("$merge([$, {\"Account\": {\"OrderID\": 1234}}])");

        // 执行转换得到修改后的JSON
        JsonNode modifiedNode = jsonata.evaluate(inputNode);

        // 格式化输出结果
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(modifiedNode));
    }
}

执行结果

运行代码后,输出的JSON中Account.OrderID将被替换为1234,其余字段保持原样:

{
  "Account": {
    "Account Name": "Firefly",
    "OrderID": 1234,
    "Product": [
      {
        "Product Name": "Bowler Hat",
        "ProductID": 858383,
        "SKU": "040657863",
        "Description": {
          "Colour": "Purple",
          "Width": 300,
          "Height": 200,
          "Depth": 210,
          "Weight": 0.75
        },
        "Price": 34.45,
        "Quantity": 4
      }
    ]
  }
}

内容的提问来源于stack exchange,提问作者mdanish98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:55:22