如果您想比较两个 JSON 对象,找出哪些字段发生了变化,并返回发生变化的字段及其新的值,您可以编写一个函数来递归比较对象。以下是一个 TypeScript 示例:文章来源:https://www.toymoban.com/news/detail-784155.html
type JSONValue = string | number | boolean | null | JsonObject | JsonArray;
interface JsonObject {
[key: string]: JSONValue;
}
type JsonArray = JSONValue[];
function compareObjects(obj1: JsonObject, obj2: JsonObject): JsonObject {
const changedFields: JsonObject = {};
for (const key in obj1) {
if (obj1.hasOwnProperty(key)) {
const value1 = obj1[key];
const value2 = obj2[key];
if (isObject(value1) && isObject(value2)) {
// 递归比较嵌套的对象
const nestedChanges = compareObjects(value1, value2);
if (Object.keys(nestedChanges).length > 0) {
changedFields[key] = nestedChanges;
}
} else if (!isEqual(value1, value2)) {
// 如果值不相等,记录变化
changedFields[key] = value2;
}
}
}
// 检查 obj2 中新增的字段
for (const key in obj2) {
if (obj2.hasOwnProperty(key) && !obj1.hasOwnProperty(key)) {
changedFields[key] = obj2[key];
}
}
return changedFields;
}
// 判断是否为对象
function isObject(value: any): value is JsonObject {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
// 判断两个值是否相等
function isEqual(value1: JSONValue, value2: JSONValue): boolean {
if (isObject(value1) && isObject(value2)) {
return compareObjects(value1, value2).length === 0;
}
return value1 === value2;
}
// 示例
const json1: JsonObject = { a: 1, b: { c: 2, d: 3 } };
const json2: JsonObject = { a: 1, b: { c: 5, d: 3 }, e: 'newField' };
const changes = compareObjects(json1, json2);
console.log(changes);
这个函数 compareObjects
将递归比较两个对象,并返回发生变化的字段及其新值。在示例中,changes
对象将包含 { b: { c: 5 }, e: 'newField' }
,表示字段 b
中的 c
值发生了变化,以及新添加了字段 e
。您可以根据实际需求调整这个函数。文章来源地址https://www.toymoban.com/news/detail-784155.html
到了这里,关于对比两个json对象有那几个字段被修改,并返回有改动的字段内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!