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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:50:27