对比两个json对象有那几个字段被修改,并返回有改动的字段内容

这篇具有很好参考价值的文章主要介绍了对比两个json对象有那几个字段被修改,并返回有改动的字段内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 如果您想比较两个 JSON 对象,找出哪些字段发生了变化,并返回发生变化的字段及其新的值,您可以编写一个函数来递归比较对象。以下是一个 TypeScript 示例:

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【mybatis-plus实体类复杂对象字段json自动相互转换,以及自定义字段类型解析器】

    引言: mybatis-plus集合对象字段json如何自动进行相互的转换? 怎样在使用mybatis-plus操作数据表的时候自动对实体类属性进行自动解析? 我们平时在做开发的时候,会遇到一个字段保存json串的情况。一般情况下mybatis-plus在做插入/更新之前将对象手动转换成json串,查询要用的时

    2023年04月13日
    浏览(89)
  • 如何修改JSON数组中的每个对象的userType属性值

    要修改JSON数组中的每个对象的`userType`属性值,您可以使用JavaScript的`map`函数或`forEach`循环。 以下是使用`map`函数的示例: ```javascript ``` 在上述示例中,我们使用`map`函数遍历原始数据数组,对于每个对象,我们检查是否存在`userType`属性,然后将其值修改为新值(在这里将其

    2024年02月10日
    浏览(33)
  • sql语句两个字段合并或者两个字段拼接显示

    mysql 使用 concat函数 小栗子: sql server 连接字段,直接使用 + 号,和java字符串拼接一样 小栗子: oracle 数据库 可以使用 || ,也可以使用 concat函数 小栗子: ACCESS数据库连接字段,使用 + 号,他与sql server 一样的 小栗子:

    2024年02月11日
    浏览(33)
  • MySQL两个字段模糊匹配

    今天遇到一个业务需求:两张MySQL表做join,两个关联键是包含关系,SQL该怎么实现。 由于两个关联键是包含关系,那么首先想到的就是like模糊匹配。 通常我们见过的like语法都是类似 a like ‘%aa%’; 那么根据这个思路,我们如何实现两个字段模糊匹配呢? 原始表a: 原始表

    2024年02月10日
    浏览(38)
  • 记两个巨坑的字段

    字段: 1:isBound 2:Bound 类型: String或者 Integer 现象: JSON数据 打到 控制层,是获取不到值的!!! 显示为NULL。 当修改为boundStatus或者其他什么都可以成功接收到值 原因(猜测): 可能是lombok在作怪, 因为lombok大小写开头会存在这种问题。

    2024年02月21日
    浏览(24)
  • HIVE获取json字段特定值(单个json或者json数组)

    1.获取单个json字符串里的某一特定值 函数:get_json_object(单个json,‘$.要获取的字段’) 示例: 代码:SELECT get_json_object(‘{“NAME”:“张三”,“ID”:“1”}’,‘$.NAME’) as name; SELECT get_json_object(‘{“NAME”:“张三”,“ID”:“1”}’,‘$.NAME’); 2. json_tuple 语法:json_tuple(json_string,

    2024年02月08日
    浏览(31)
  • package.json字段说明

    main :包的主要入口文件。当其他项目使用您的包时,它们将引入您指定的 main 文件。通常,这是一个 JavaScript 文件,用于导出包的功能、类或模块。 publishConfig :用于配置发布到npm相关的配置。 main :commonjs模块文件入口, 当包被发布后,会用该字段替换掉上一级的 main 字

    2024年02月06日
    浏览(33)
  • Java list集合中根据其中两个字段去重

    可以使用Java 8的Stream API和Collectors.toSet()方法来实现根据其中两个字段去重。 首先,使用Stream API将List转换为Stream,然后使用distinct()方法进行去重。distinct()方法默认使用元素的equals()和hashCode()方法进行去重。如果想要根据其中两个字段进行去重,需要重写equals()和hashCode()方法

    2024年02月16日
    浏览(38)
  • Sql Server增加字段、修改字段、修改类型、修改默认值

    1、修改字段名: alter table 表名 rename column A to B 2、修改字段类型: alter table 表名 alter column 字段名 type not null 3、修改字段默认值 alter table 表名 add default (0) for 字段名 with values 如果字段有默认值,则需要先删除字段的约束,在添加新的默认值, select c.name from sysconstraints a i

    2024年02月06日
    浏览(31)
  • es head 新增字段、修改字段、批量修改字段、删除字段、删除数据、批量删除数据

    目录 一、新增字段 二、修改字段值 三、批量修改字段值 ​四、删除字段 五、删除数据/文档 六、批量删除数据/文档 put   http://{ip}:{port}/{index}/_mapping/{type}     其中,index是es索引、type是类型 数据: 例子: 注意:如果报错Types cannot be provided in put mapping requests, unless the in

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包