我正在尝试实现一种合并JSON对象的方法,这些对象基于RFC 7396对它们应用补丁。
为此,我使用JSON Merge Patch和Pretty 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
我现在可以继续生存,因为目前给出的输出实际上满足了我的需求。但是在测试时我感到很困惑,我想了解这里发生的事情,因为在未来的情况下我可能会遇到这种情况。
答案 0 :(得分:0)
我有时会愚蠢,我会删除这个问题。但我会回答它,因为我认为有人可能会犯同样的愚蠢错误。
我只是注意到jsonmergepatch.apply(source, target)
不仅返回了应用了补丁的对象,而且它实际上将补丁应用于真实对象并将其返回。我期待它能克隆它或什么的。