如何使用NiFi Replace Values将JSON中空对象转为null?
问题描述
我有如下JSON数据:
{ "cnpjemitente" : "48791685000168", "pedido" : "543306", "pedidocliente" : { }, "emissao" : "20220912" }
我需要将其中pedidocliente字段的空对象{}替换为null,得到如下结果:
{ "cnpjemitente" : "48791685000168", "pedido" : "543306", "pedidocliente" : null, "emissao" : "20220912" }
注意该字段有时会包含实际值,仅当它是空对象时才设置为null,请问该如何实现?
解决方案
Python 实现
通过json模块解析JSON后,直接检查目标字段是否为空对象:
import json # 原始JSON字符串 raw_json = ''' { "cnpjemitente" : "48791685000168", "pedido" : "543306", "pedidocliente" : { }, "emissao" : "20220912" } ''' # 解析为字典 data = json.loads(raw_json) # 检查并替换空对象 if data.get("pedidocliente") == {}: data["pedidocliente"] = None # 转换回格式化的JSON字符串 result = json.dumps(data, indent=2) print(result)
JavaScript 实现
解析JSON对象后,通过Object.keys()判断目标对象是否为空:
const rawJson = `{ "cnpjemitente" : "48791685000168", "pedido" : "543306", "pedidocliente" : { }, "emissao" : "20220912" }`; // 解析为JS对象 const data = JSON.parse(rawJson); // 判断空对象并替换 if (Object.keys(data.pedidocliente).length === 0) { data.pedidocliente = null; } // 转换回格式化的JSON字符串 const result = JSON.stringify(data, null, 2); console.log(result);
Java 实现
使用Jackson库处理JSON节点,判断空对象后替换为null:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.NullNode; import java.io.IOException; public class JsonProcessing { public static void main(String[] args) throws IOException { String rawJson = "{\n" + " \"cnpjemitente\" : \"48791685000168\",\n" + " \"pedido\" : \"543306\",\n" + " \"pedidocliente\" : { },\n" + " \"emissao\" : \"20220912\"\n" + "}"; ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(rawJson); JsonNode targetNode = rootNode.get("pedidocliente"); // 检查是否为空对象 if (targetNode != null && targetNode.isObject() && targetNode.size() == 0) { ((com.fasterxml.jackson.databind.node.ObjectNode) rootNode).set("pedidocliente", NullNode.getInstance()); } // 输出格式化结果 String result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); System.out.println(result); } }
内容的提问来源于stack exchange,提问作者Rodrigo Hajime Himauari
相关产品推荐
相关产品推荐

