Java中序列化JSON到JSON-LD的代码示例? [英] An code example of serialization JSON to JSON-LD in Java?

查看:386
本文介绍了Java中序列化JSON到JSON-LD的代码示例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一项任务,虽然我需要将以JSON形式表示的大量数据转换为JSON-LD。我想用这个 JSON-LD Java实现来做到这一点,但我不这样做明白,我应该怎么做。

I have a task and though I need to convert a some mass of data represented in the form of JSON to JSON-LD. I want to do this with this JSON-LD Java implementation, but I don't understand, what should I do.

我在网站上看过教程并在互联网上阅读有关JSON-LD的内容,但还不了解最简单的事情:如何将JSON转换为JSON LD?

I have watched tutorials on the website and read something about JSON-LD on the Internet, but do not understand the simplest thing yet: how do I convert JSON to JSON LD?

例如,我在JSON中使用此代码:

For example, i have this code in JSON:

{
   "name" : "Andreas",
   "age" : 20,
   "profession" : "student",
   "personalWebsite" : "example.com"
}

那我该怎么办?像context.add(example.com)这样的东西?

What should I do then? Something like context.add("example.com")?

InputStream inputStream = new FileInputStream("C:\Users\Albert\input.json");
Object jsonObject = JsonUtils.fromInputStream(inputStream);
Map context = new HashMap();
JsonLdOptions options = new JsonLdOptions();


推荐答案

在数据中添加@context条目。

Add a '@context' entry to your data.

{
   "name" : "Andreas",
   "age" : 20,
   "profession" : "student",
   "personalWebsite" : "example.com",
   "@context":"http://schema.org/"
}

您的JSON-LD处理器将完成其余的工作(自0.9版本起)

Your JSON-LD Processor will do the rest (since version 0.9)

作为测试,你可以将你的json转换为rdf。

As test you can convert your json to rdf.

package overflow.stack2449461;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.Collection;


import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.rio.RDFHandlerException;
import org.eclipse.rdf4j.rio.RDFParser;
import org.eclipse.rdf4j.rio.RDFWriter;
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.rio.helpers.StatementCollector;


public class Test {
    @org.junit.Test
    public void testForYourCode() {
        String data = "{\"name\" : \"Andreas\",\"age\" : 20,\"profession\" : \"student\", \"personalWebsite\" : \"example.com\",\"@context\": \"http://schema.org/\"}";
        try (InputStream in = new ByteArrayInputStream(data.getBytes("utf-8"))) {
            String dataAsRdf = readRdfToString(in, RDFFormat.JSONLD, RDFFormat.NTRIPLES, "");
            System.out.println(dataAsRdf);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * @param in
     *            a rdf input stream
     * @param inf
     *            the rdf format of the input stream
     * @param outf
     *            the output format
     * @param baseUrl
     *            usually the url of the resource
     * @return a string representation
     */
    public static String readRdfToString(InputStream in, RDFFormat inf, RDFFormat outf, String baseUrl) {
        Collection<Statement> myGraph = null;
        myGraph = readRdfToGraph(in, inf, baseUrl);
        return graphToString(myGraph, outf);
    }

    /**
     * @param inputStream
     *            an Input stream containing rdf data
     * @param inf
     *            the rdf format
     * @param baseUrl
     *            see sesame docu
     * @return a Graph representing the rdf in the input stream
     */
    public static Collection<Statement> readRdfToGraph(final InputStream inputStream, final RDFFormat inf,
            final String baseUrl) {
        try {
            final RDFParser rdfParser = Rio.createParser(inf);
            final StatementCollector collector = new StatementCollector();
            rdfParser.setRDFHandler(collector);
            rdfParser.parse(inputStream, baseUrl);
            return collector.getStatements();
        } catch (final Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Transforms a graph to a string.
     * 
     * @param myGraph
     *            a sesame rdf graph
     * @param outf
     *            the expected output format
     * @return a rdf string
     */
    public static String graphToString(Collection<Statement> myGraph, RDFFormat outf) {
        StringWriter out = new StringWriter();
        RDFWriter writer = Rio.createWriter(outf, out);
        try {
            writer.startRDF();
            for (Statement st : myGraph) {
                writer.handleStatement(st);
            }
            writer.endRDF();
        } catch (RDFHandlerException e) {
            throw new RuntimeException(e);
        }
        return out.getBuffer().toString();
    }

}

使用pom.xml

   <dependency>
        <groupId>org.eclipse.rdf4j</groupId>
        <artifactId>rdf4j-runtime</artifactId>
        <version>2.2</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>com.github.jsonld-java</groupId>
        <artifactId>jsonld-java</artifactId>
        <version>0.10.0</version>
    </dependency>

它会将你的json字符串打印为rdf NTRIPLES

It will print your json string as rdf NTRIPLES

_:b0 <http://schema.org/age> "20"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:b0 <http://schema.org/name> "Andreas" .
_:b0 <http://schema.org/personalWebsite> "example.com" .
_:b0 <http://schema.org/profession> "student" .

这篇关于Java中序列化JSON到JSON-LD的代码示例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆