gpt4 book ai didi

java - 如何使用 JSONLD-JAVA 遍历、导航和访问 JSON-LD 文件中的对象?

转载 作者:行者123 更新时间:2023-11-30 06:04:20 28 4
gpt4 key购买 nike

我需要将一个大型 JSON-LD 文件作为我用 Java 编写的算法的输入。因此,我打算为此使用 JSONLD-JAVA。

JSONLD-JAVA页面显示了一个读取 JSON-LD 文件的示例,但不是用于导航或遍历它,也不是访问其中的单个对象。相反,它指的是 JSON-LDJSON-LD API有关特定可能操作的详细信息的规范。

然而,JSON-LD 规范只是定义了 JSON-LD 的语法和语义,并没有说明如何访问它们,当然也不应该,它只是格式的规范。我期望在 JSON-LD API 规范中描述这种操作,但它只描述了将整个 JSON-LD 文件转换为不同形式(压缩、扩展、展平和转换为 RDF)的操作。它似乎不包括访问对象的操作(例如,访问对象的键值对)。

所以我猜我们应该读取 JSON-LD 文件并将其展开或展平,然后将其作为纯 JSON 进行访问。但是 JSONLD-JAVA 方法只返回 Object 的实例,所以我不清楚如何使用这些对象来获取 JSON 键值对。唯一的异常(exception)似乎是 frame 方法,它返回一个 Map,但我不太清楚什么是框架。 JSON-LD 规范不包含“框架”一词,而且 JSON-LD API 规范有非常简洁的解释,似乎无助于理解如何访问对象的键值对。

我只有来自 JSONLD-JAVA 方法的 Object 实例的事实也使得它看起来很难使用一些 JSON 库来使用它们,除非我使用一些知道这些对象的内部格式的 JSON 库由JSONLD-JAVA形成,但是JSONLD-Java的页面没有提到任何这样的库。

我期望能够读取 JSON-LD 文件,然后在 Java 中以编程方式访问或操作它,并拥有与主要概念相对应的 Java 类,例如 JSONLDObject提供其键值对的方法。

当我阅读以上几页时,我觉得它们是为那些已经知道一些我不知道的事情的人准备的。所以也许我错过了什么。否则,是否有关于使用 JSONLD-JAVA 或什至仅使用 JSONLD API 来遍历对象的教程?

最佳答案

如果您阅读链接到的 JSONLD-JAVA 页面上的文档,它以一个注释示例开头:

// 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));

第二条评论很有趣,所以让我为您突出显示:

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);

关键是 JSONLD 是 JSON,当你像上面那样将它加载到内存中时,你可以通过转换 Object 来导航 JSON 结构视情况而定。

让我们看一下来自 JSON-LD specification 的示例 #3:

{
"@context":
{
"name": "http://schema.org/name", // ← This means that 'name' is shorthand for 'http://schema.org/name'
"image": {
"@id": "http://schema.org/image", // ← This means that 'image' is shorthand for 'http://schema.org/image'
"@type": "@id" // ← This means that a string value associated with 'image' should be interpreted as an identifier that is an IRI
},
"homepage": {
"@id": "http://schema.org/url", // ← This means that 'homepage' is shorthand for 'http://schema.org/url'
"@type": "@id" // ← This means that a string value associated with 'homepage' should be interpreted as an identifier that is an IRI
}
}
}

因此,如果您想要 @idimage 值,您可以这样做:

Map<String, Object> root = (Map) jsonObject;
Map<String, Object> context = (Map) root.get("@context");
Map<String, Object> image = (Map) root.get("image");
String imageId = (String) image.get("@id");

关于java - 如何使用 JSONLD-JAVA 遍历、导航和访问 JSON-LD 文件中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715194/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com