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

如何在JSON.stringify时移除$id和$values属性并格式化JSON

移除JSON中的$id和$values属性并格式化

要清理C# API返回的JSON中带有的$id和$values属性,你可以通过遍历JSON结构的方式,精准移除或替换这些元数据属性,还原后端原始结构。以下是两种可行的实现方案:

方案一:递归清理函数(推荐处理复杂嵌套结构)

这个方法会深度遍历整个JSON对象/数组,自动跳过$id属性,并将$values对应的数组直接替换原对象的内容,完全还原原始集合结构:

function cleanSerializedJson(data) {
    // 处理数组:遍历每个元素递归清理
    if (Array.isArray(data)) {
        return data.map(item => cleanSerializedJson(item));
    }
    // 处理对象:遍历所有键值对
    if (typeof data === 'object' && data !== null) {
        // 如果当前对象包含$values,直接返回清理后的数组内容
        if ('$values' in data) {
            return cleanSerializedJson(data.$values);
        }
        const cleanedObj = {};
        for (const key in data) {
            // 跳过$id属性
            if (key === '$id') continue;
            cleanedObj[key] = cleanSerializedJson(data[key]);
        }
        return cleanedObj;
    }
    // 基本类型(字符串、数字等)直接返回
    return data;
}

// 使用示例
const rawParsed = JSON.parse(result.Value);
const cleanedData = cleanSerializedJson(rawParsed);
const jsonFormatted = JSON.stringify(cleanedData, null, '\t');

方案二:利用JSON.stringify的replacer参数(适合简单结构)

如果你的JSON结构层级较少,可以直接用JSON.stringify的replacer函数过滤$id,同时处理$values的结构转换:

const rawParsed = JSON.parse(result.Value);
const jsonFormatted = JSON.stringify(rawParsed, (key, value) => {
    // 移除$id属性
    if (key === '$id') return undefined;
    // 若当前是$values对应的数组,直接返回数组本身
    if (key === '$values') return value;
    // 处理包含$values的对象,直接返回其数组内容
    if (typeof value === 'object' && value !== null && '$values' in value) {
        return value.$values;
    }
    return value;
}, '\t');

补充说明

这些$id和$values属性通常是C#后端使用Newtonsoft.Json(Json.NET)时,开启了PreserveReferencesHandling或ReferenceLoopHandling配置生成的元数据,用于处理对象引用和循环引用问题。前端清理后即可得到与后端原始数据结构一致的JSON,直接传递给组件使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:35:14