为什么我无法向任何方向应用JSON补丁?

时间:2015-09-02 14:06:24

标签: javascript json node.js

我正在尝试实现一种合并JSON对象的方法,这些对象基于RFC 7396对它们应用补丁。

为此,我使用JSON Merge PatchPretty JSON。这就是我所拥有的:

#!/usr/bin/env node
var jsonmergepatch = require('json-merge-patch');
var prettyjson = require('prettyjson');
var options = {keysColor: 'blue',dashColor: 'red',stringColor: 'green'};

var entry = {
  "leaf": {
    "enabled": {
      "type": {
        "name": "string"
      },
      "id": "enabled",
      "value": "123"
    }
  },
  "id": "configuration"
};
var template = {
  "leaf": {
    "enabled": {
      "type": {
        "name": "string"
      },
      "id": "enabled",
      "value": "_"
    }
  },
  "id": "configuration"
};

var entryAppliedOnTemplate = jsonmergepatch.apply(template, entry);
var templateAppliedOnEntry = jsonmergepatch.apply(entry, template);

console.log("Entry Applied On Template:")
console.log(prettyjson.render(entryAppliedOnTemplate, options));
console.log("\nTemplate Applied On Entry:")
console.log(prettyjson.render(templateAppliedOnEntry, options));

哪个输出:

Entry Applied On Template:
leaf: 
  enabled: 
    type: 
      name: string
    id:    enabled
    value: 123
id:   configuration

Template Applied On Entry:
leaf: 
  enabled: 
    type: 
      name: string
    id:    enabled
    value: 123
id:   configuration

我无法理解的是,在这种情况下,输出是平等的,我认为我没想到它是正确的。我无法理解为什么我的输出不是这样的:

Entry Applied On Template:
leaf: 
  enabled: 
    type: 
      name: string
    id:    enabled
    value: 123
id:   configuration

Template Applied On Entry:
leaf: 
  enabled: 
    type: 
      name: string
    id:    enabled
    value: _
id:   configuration

我现在可以继续生存,因为目前给出的输出实际上满足了我的需求。但是在测试时我感到很困惑,我想了解这里发生的事情,因为在未来的情况下我可能会遇到这种情况。

1 个答案:

答案 0 :(得分:0)

我有时会愚蠢,我会删除这个问题。但我会回答它,因为我认为有人可能会犯同样的愚蠢错误。

我只是注意到jsonmergepatch.apply(source, target)不仅返回了应用了补丁的对象,而且它实际上将补丁应用于真实对象并将其返回。我期待它能克隆它或什么的。