我可以将JSON-LD转换为Java对象吗?

5

编辑:我改变了主意。我将寻找一种方法生成Java类,并将JSON作为该类对象加载。


我刚刚发现存在一种名为JSON-LDJSON变体。

它似乎是一种更加结构化的定义JSON的方式,像XSD一样,它带有一个关联模式,让我想起了XML

我能否从JSON-LD创建一个Java类,在运行时加载它,并用它来将JSON-LD转换为该类的实例化?

我阅读了两个实现的文档,但没有找到相关内容。也许我读错了?


1
这个问题表述过于笼统且不够清晰。在Java中,所有东西都是原始类型或对象。所以快速回答是:是的。JSON-LD是一种表示RDF的格式。在Java中,RDF表示为RDF图形或RDF模型,它包装了一个图形。所有这些东西 - 在您的术语中都是json-ld的实例,并且显然都是Java对象。那么,请澄清一下 - 为什么您不能使用RDF? - ssz
@ssz:此外,JSON-LD并不代表RDF。JSON-LD可以被转换为RDF模型。而且RDF模型根本不是Java对象,必须进行转换。所以,你建议将JSON-LD转换为RDF,然后再将RDF转换为Java对象。这正确吗?难道没有一个库可以直接将JSON-LD转换为Java对象吗? - Marco Sulla
"JSON-LD是一种具体的RDF语法": https://www.w3.org/TR/json-ld 这意味着任何json-ld文档都可以表示为RDF图(可能是通用意义上的)。 RDF - 根本不是格式,不能从其他格式转换。但它是以RDF形式表示数据。有一个强大的API可以处理它 - Apache Jena,它使用com.github.jsonld-java:json-ld API作为解析器。如果您不想使用任何RDF API,只想使用解析器,那么也许您需要编写自己的模型-API。 - ssz
1
承认,JSON-LD略微比RDF更广泛,但通常它被用来作为RDF序列化(数据集或图表)的格式。因此,如果没有空谓语,它可以作为图形或数据集加载,这些都是Java“Object”,如果所使用的API是用Java编写的。顺便提一下,图形可以由三元组存储支持,因此可能不完全存在于内存中。 - ssz
@ssz:我的意图不是将其用于RDF序列化,而是作为JSON的替代品。我会将其用作XML的替代品,XML也具有告诉您XML结构的模式。如果我理解正确,JSON-LD包含数据和模式。或者我错了吗? - Marco Sulla
显示剩余3条评论
2个回答

1

我通过谷歌搜索找到了一个库,可以将JSON-LD解码为“未定义”的对象

// Open a valid json(-ld) input file
InputStream inputStream = new FileInputStream("input.json");
// Read the file into an Object (The type of this object will be a List, Map, String, Boolean,
// Number or null depending on the root object in the file).
Object jsonObject = JsonUtils.fromInputStream(inputStream);
// Create a context JSON map containing prefixes and definitions
Map context = new HashMap();
// Customise context...
// Create an instance of JsonLdOptions with the standard JSON-LD options
JsonLdOptions options = new JsonLdOptions();
// Customise options...
// Call whichever JSONLD function you want! (e.g. compact)
Object compact = JsonLdProcessor.compact(jsonObject, context, options);
// Print out the result (or don't, it's your call!)
System.out.println(JsonUtils.toPrettyString(compact));

https://github.com/jsonld-java/jsonld-java

显然,它可以从字符串中获取信息,就好像从文件或其他来源读取一样。我无法告诉你如何访问object的内容。文档似乎还算不错。

这似乎是一个活跃的项目,最近的提交时间只有4天,有30个贡献者。如果这对您有任何影响,许可证是BSD 3-Clause。

我与该项目没有任何关联。我既不是作者,也没有发起任何拉取请求。这只是我找到的东西。

祝你好运,希望这能帮到你!


我可以使用特定的类替代 Object jsonObject 吗?有没有一种方法可以从 JSON-LD 中创建该类? - Marco Sulla
@MarcoSulla,我相信你可以使用反射将其放入一个类中,甚至可能有一种自动完成的方法。我没有使用过那个库,所以我不知道。 - computercarguy

0

好吧,但我必须手动创建这个类 :P - Marco Sulla
1
这个链可能是可行的:[JSON-LD文件] --{JSON-LD for Jackson}-> [Java对象] --{Jackson或Gson}-> [JSON文件] --{jsonschema2pojo}-> [Java类]。 - taha
不知道如何在没有类的情况下实现 {JSON-LD for Jackson}-> [Java Object] - Marco Sulla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接