【问题标题】:Can I transform a JSON-LD to a Java object?我可以将 JSON-LD 转换为 Java 对象吗?
【发布时间】:2019-07-25 17:00:12
【问题描述】:

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


我刚刚发现存在JSON 的一个变体,称为JSON-LD。

在我看来,定义 JSON 的一种更结构化的方式,让我想起 XML 和关联的架构,例如 XSD。

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

我阅读了这两种实现的文档,但我一无所获。也许我读错了?

【问题讨论】:

  • 这个问题过于宽泛,措辞不佳。 Java 中的一切要么是原始的,要么是对象。所以快速回答:是的。 JSON-LD 是用于表示 RDF 的格式。 RDF 在 Java 中表示为 RDF Graph 或 RDF Model,它包装了一个 Graph。所有这些东西 - 用你的话来说都是 json-ld 的实例,而且,很明显,它们是 java 对象的。所以,请澄清一下 - 为什么你不能使用 RDF?
  • @ssz 我认为“使用 jsonld-java 或 Apache Jena”使其非常具体......
  • @ssz:此外 JSON-LD 不代表 RDF。 JSON-LD 可以是trasnformed to an RDF model。而且 RDF 模型根本不是 Java 对象,它们必须被转换。好吧,您建议将 JSON-LD 转换为 RDF,然后将 RDF 转换为 Java 对象。这是正确的吗?有没有直接从 JSON-LD 转换为 Java 对象的库?
  • “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。
  • 承认,JSON-LD 比 RDF 宽一点,但通常它仅用于 RDF 序列化(数据集或图形)。因此,如果没有空白谓词,它可以加载为图形或数据集,它们是 java Objects,如果使用的 API 是用 Java 编写的。顺便说一句,Graph 可能由三元存储支持,因此可能不会完全存在于内存中。

标签: java json jena json-ld


【解决方案1】:

通过 Google 搜索将我带到一个库,该库会将 JSON-LD 解码为“未定义”Object。

// 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 本身创建类?
  • @MarcoSulla,我相信您可以使用反射将其放入一个类中,甚至可能有一种方法可以自动完成。我没用过那个库,所以不知道。
【解决方案2】:

查看此页面:JSON-LD Module for Jackson

【讨论】:

  • 好吧,但我必须手动创建类:P
  • 这个链可能是可能的:[JSON-LD 文件]--{杰克逊的 JSON-LD}-> [Java 对象]--{杰克逊或 Gson}-> [JSON 文件]- {jsonschema2pojo}-> [Java 类]
  • 我不知道没有课程{JSON-LD for Jackson}-> [Java Object] 怎么可能......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2012-08-29
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多