相关文章推荐
开朗的海豚  ·  星梦互娱文化传媒(云南)有限公司校园招聘_2 ...·  7 月前    · 
刚毅的莴苣  ·  赛亚人- 萌娘百科万物皆可萌的百科全书·  7 月前    · 
憨厚的篮球  ·  曼联宣布签下范德贝克 ...·  7 月前    · 
仗义的凉茶  ·  文化類節目:從“清流”到“潮流”--理論-人民網·  8 月前    · 
销魂的杯子  ·  芙蓉天气预报_湖南省长沙市芙蓉区天气预报查询 ...·  8 月前    · 
小百科  ›  javascript - Javascript JSON比较/差异? - SegmentFault 思否
javascript seg
温文尔雅的竹笋
2 年前
segmentfault segmentfault
注册登录
问答 博客 标签 活动
发现
✓ 使用“Bing”搜本站 使用“Google”搜本站 使用“百度”搜本站 站内搜索
注册登录
  1. 首页
  2. 问答
  3. Stack Overflow 翻译
  4. 问答详情

Javascript JSON比较/差异?

社区维基
1
发布于
2022-12-08
新手上路,请多包涵

假设我有以下 2 个 json 对象:

 JSON A:
"Field A":"1",
"Field B":"2",
"Field D":"Something",
"Field E":"6"
JSON B:
"Field A":"1",
"Field B":"2",
"Field C":"3",
"Field D":"Different"

示例函数:function (jsonstringA, jsonstringB)

示例(如果使用 JSON A 和 JSON B 作为参数):

返回一个新的 JSON 对象,其中包含:

"Field C":"3", // because function sees jsonstringB had no "Field C" "Field D": "Different" // sees jsonstringB had a different value for "Field D"

请注意,它使用 jsonstringA 作为比较的基础,因此该函数仅返回缺少的字段和 jsonStringB 的值。这就是不返回“Field E”及其值的原因。

如果可能想出一个返回包含已更改值的 json 对象的函数,最好的方法是什么?

我尝试过什么:我尝试通过手动指定我要检查的字段来进行比较,但我想要一些东西,要求我不要对“字段”进行硬编码,因为它非常低效,每次我添加JSON B 的一个新字段,我必须在我正在寻找的字段中进行硬编码……这就是为什么我正在寻找不那么痛苦的东西。

原文由 Rolando 发布,翻译遵循 CC BY-SA 4.0 许可协议

Stack Overflow 翻译 javascript
阅读 159
2 个回答
得票 最新
社区维基
1
发布于
2022-12-08
✓ 已被采纳

创建这样的函数并不难。只需遍历第二个对象中的每个字段,如果它不存在于第一个对象中或值与第一个不同,则将该字段放入返回对象中。

 var compareJSON = function(obj1, obj2) {
  var ret = {};
  for(var i in obj2) {
    if(!obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) {
      ret[i] = obj2[i];
  return ret;

您可以在 此演示页面 上看到它的运行情况。

原文由 Peter Olson 发布,翻译遵循 CC BY-SA 3.0 许可协议

社区维基
1
发布于
2022-12-08

该函数,正是我所追求的,对于非 JSON 对象比较也很有用

http://jsfiddle.net/muJEu/11/

还为深层嵌套对象扩展了它。

 isEmpty

可以通过多种方式完成。请参阅 对象是否为空?

 var compareObj = function(obj1, obj2) {
  var ret = {},rett;
  for(var i in obj2) {
      rett = {};
      if (typeof obj2[i] === 'object'){
          rett = compareObj (obj1[i], obj2[i]) ;
          if (!isEmpty(rett) ){
           ret[i]= rett
       }else{
           if(!obj1 || !obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) {
              ret[i] = obj2[i];
  return ret;
 
推荐文章
开朗的海豚  ·  星梦互娱文化传媒(云南)有限公司校园招聘_2025星梦互娱文化传媒 ...
7 月前
刚毅的莴苣  ·  赛亚人- 萌娘百科万物皆可萌的百科全书
7 月前
憨厚的篮球  ·  曼联宣布签下范德贝克 签约5年身披34号球衣--体育--人民网
7 月前
仗义的凉茶  ·  文化類節目:從“清流”到“潮流”--理論-人民網
8 月前
销魂的杯子  ·  芙蓉天气预报_湖南省长沙市芙蓉区天气预报查询- 我的家天气网
8 月前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南