- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将一个大型 JSON-LD 文件作为我用 Java 编写的算法的输入。因此,我打算为此使用 JSONLD-JAVA。
JSONLD-JAVA页面显示了一个读取 JSON-LD 文件的示例,但不是用于导航或遍历它,也不是访问其中的单个对象。相反,它指的是 JSON-LD和 JSON-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 aList
,Map
,String
,Boolean
,Number
ornull
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
}
}
}
因此,如果您想要 @id
的 image
值,您可以这样做:
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/
我正在尝试创建尽可能小的 ELF。我创建了一个这样的测试文件(NASM 语法): SECTION .text dd 0xdeadbeef 使用此链接描述文件: SECTIONS { .text
GNU LD 链接器命令语言是否有条件语句? 背景:我正在为 arm cortex m0+ 开发固件,该固件由引导加载程序和应用程序组成。两者都在单独的项目中进行编译和刷新,但我使用了一个框架,其中包
我很确定 ld 有一个手册页链接器脚本语法,但我找不到它。 最佳答案 如果您更喜欢比 info 更方便的东西, 这是一个可浏览的 HTML 版本:ld.info: Scripts .但它可能不是完全最
谁能解决这个练习,这样我就能明白我错在哪里,因为有太多的 LOL 变量。 生成一个 C 代码,将其放在以下表达式之前 printf ("% ld% ld% ld \ n", lol, & lol, *
在他关于理解 Linux Kernel Initcall Mechanism 的文章中, Trevor 创建了一个用户空间程序来模拟调用 linux 驱动程序的 init_module() 的机制。
/usr/bin/ld: cannot find -ldlib /usr/bin/ld: cannot find -lcblas /usr/bin/ld: cannot find -llapack 在
我想以 json-ld 格式创建一组人,但我需要保留一些键而不是使用数组,所以我首先尝试了这个: { "@context" : { "@base" : "http://www.exampl
所以我试图围绕 JSON-LD 进行思考,我看到的所有示例主要包括嵌入“链接数据”。但我想提供对链接数据的引用(主要是因为嵌入所有数据可能会产生 10MB 的有效负载)。所以我想知道我这样做是否正确。
我在这里复制了 json-ld standard 中的示例的一部分: { "@context": { "foaf": "http://xmlns.com/foaf/0.1/", "
考虑这样一个程序: #include void foo() __attribute__((__weak__)); int main() { printf("%p\n", (void *)fo
我正在尝试使用一个名为 GLV 的小部件库对于我正在开发的应用程序。我正在运行 Linux Mint 17。我安装了所有库并成功构建了 GLV 库,但是当我尝试运行已构建的示例之一时,出现了此共享库错
在将未编辑的 JSON 数据转换为 JSON-LD 时,使用前缀和数据值为对象构造 IRI 时遇到问题。我运行的示例代码是: { "@context" : { "prefix" : "
假设我有一个 JSON 对象,它在嵌套对象中包含一些属性。 { "title": "My Blog Post", "meta": { "publishedAt": "2
我是 JSON-LD 和 LOD 的新手,所以请原谅我使用的术语。我正致力于在 JSON-LD 中创建数据模型,以描述基于欧洲数据模型 (http://pro.europeana.eu/edm-doc
我有一个玩具 x86 汇编程序,我正在用 as 编写和编译它和 ld : .text .global _start _start: movq $1, %rax movq
我正在尝试创建 Google 的结构化数据,但不知道我在做什么。我将其设置为一个组织,然后将 SD 标记工具用于我的所有产品。我将每个 JSON-LD 产品直接从标记工具而不是嵌套放入它自己的脚本标签
我正在尝试创建 Google 的结构化数据,但不知道我在做什么。我将其设置为一个组织,然后将 SD 标记工具用于我的所有产品。我将每个 JSON-LD 产品直接从标记工具而不是嵌套放入它自己的脚本标签
我正在尝试使用 vcpkg 和 ndk r20 为 android arm 构建 tesseract我必须编辑 CMakeLists.txt 并添加 glob.c 和 glob.h,因为它们不在 nd
长话短说: 有没有办法让我(没有 root 访问权限)使链接器(由 gcc 调用)不知道 /etc/ld.so.conf 中包含的目录的内容 在通过 ldconfig 缓存之后? 详细说明: 我正在尝
我想将/opt/vertica/lib64 添加到系统库路径中,所以我执行以下步骤: (1) 将/opt/vertica/lib64加入/etc/ld.so.conf,运行ldconfig, (2)
我是一名优秀的程序员,十分优秀!