这是How to reliably hash JavaScript objects?的近似副本,有人想要可靠地散列javascript对象;
既然json-ld规范已经过验证,我看到有一个规范化程序,它们宣传这是规范化json对象的一种潜在方法:
使用RDF数据集规范化算法规范化数据,然后将输出转储为规范化的NQuads格式。然后可以通过SHA-256或类似算法处理NQuads,以获得数据集内容的确定性散列。
构建json对象的哈希总是很痛苦,因为像
这样的东西sha1(JSON.stringify(object))
不起作用或不保证在各实现之间工作相同(键的顺序未定义为示例)。
json-ld是否像广告一样工作?将它用作散列对象的通用json规范化过程是否安全?这些对象可以是标准的json对象,还是需要一些json-ld装饰(@context,..)来规范化?
答案 0 :(得分:3)
是的,规范化适用于JSON-LD,但是需要为对象提供上下文(通过@context属性),以便它们生成任何RDF。它是以NQuads格式确定性输出的RDF(例如,然后可以进行散列)。
如果未通过@context定义JSON-LD文档中的属性,则在处理期间将删除该属性。 JSON-LD要求您通过将文档与URL相关联来为文档中的属性提供全局含义(语义)。这些URL可以提供关于属性的含义,它们的范围,域等的进一步的机器可读信息。以这种方式,数据变为"链接" - 您可以在另一个API的上下文中理解JSON文档的含义,并且可以遍历文档(通过HTTP)以查找更多信息。
所以对主要问题的简短回答是"是的,您可以使用JSON-LD规范化为JSON对象构建唯一的哈希值,但是,需要注意的是JSON对象必须是JSON-LD对象,它实际上构成了JSON的子集。发生归一化算法的主要原因之一是对图形进行散列和数字签名(JSON-LD文档)进行比较。