我有一个客户使用 JSON 来表示对象。例如:
var person = {
fname: "John",
lname: "Doe",
nicknames: ["jake", "kevin"]
}
为了编辑这些条目,我们希望包含每个对象的 GUIDS。尚未建立嵌入 GUID 的方法。我目前正在考虑做这样的事情:
var person = {
_guids: {
fname: "XXX",
lname: "XXX",
_nicknames: "XXX", /* This GUID corresponds to the nickname container */
nicknames: ["jake-guid", "kevin-guid"],
}
fname: "John",
lname: "Doe",
nicknames: ["jake", "kevin"]
}
如果每个项目都是它自己的对象,它会变得非常困惑,并且在不需要 GUID 的情况下会禁止干净的交换。但是,这种方法也导致了如何处理这样的问题:
var person = {
_guids: {
fname: "XXX",
lname: "XXX",
sacks_of_marbles: ["container-guid",
"first-sacks-guid", ["XXX", "XXX"],
"second-sacks-guid", ["XXX", "XXX"]]
}
fname: "John",
lname: "Doe",
sacks_of_marbles: [["red", "blue-with-swirls"], ["green", "pink"]]
}
关于如何保持清洁、避免冗长以及包含 GUID 的能力有什么建议吗?
最佳答案
在我看来,最干净的“识别策略”是,首先只包含相关的标识符,其次将那些标识符包含在对象的范围内。
在您的情况下,如果得知 fname
,我真的会感到震惊。和 lname
需要自己的标识符。它们是单个 person
的属性或属性。对象或记录。 person
可能会有一个ID,以及相关的fname
和 lname
值应该可以通过 person
轻松识别语境:
var person = {
id: <guid>,
fname: "Robert",
lname: "Marley",
nicknames: ["Bob Marley"]
};
或者,如果
nicknames
属性实际上是一个引用列表,也许是这样的:var person = {
id: <guid>,
fname: "Robert",
lname: "Marley",
nicknames: [{id:<guid>,nickname:"Bob Marley"}]
};
如果由于某些特殊原因,每个名称都是其自己的具有属性和标识符的半独立记录,请将其视为完全限定的对象:
var person = {
id: <guid>,
fname: {id:<guid>, name:"Robert"},
lname: {id:<guid>, name:"Marley"},
nicknames: [ {id:<guid>,nickname:"Bob Marley"} ]
};
虽然这里的第三个例子并不是非常令人困惑,但它可能比必要的要冗长得多。我强烈建议为第一个例子拍摄并让上下文来完成它的工作。
关于JSON 最佳实践 : GUIDS for contained data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16656080/