如何使用IBM Jsonata4Java替换JSONATA表达式指向的JSON值?
使用Jsonata4Java修改JSON中
Account.OrderID的值 核心思路
Jsonata是声明式的查询与转换语言,Jsonata4Java通过执行转换表达式生成修改后的JSON对象,而非直接对原JSON进行原地修改。要替换Account.OrderID的值,只需构造一个保留原JSON所有结构、仅修改目标字段的转换表达式即可。
具体步骤与代码示例
- 引入依赖
确保项目中已添加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>
- 编写Jsonata转换表达式
推荐使用$merge函数,它能简洁合并原JSON结构与修改的字段,无需手动复制其他字段:
$merge([$, {"Account": {"OrderID": 1234}}])
如果需要明确控制所有字段,也可以显式构造完整JSON结构:
{ "Account": { "Account Name": Account."Account Name", "OrderID": 1234, "Product": Account.Product } }
- 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
相关产品推荐
相关产品推荐

