如何在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
相关产品推荐
相关产品推荐

