有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中JSON到JSONLD序列化的代码示例?

我需要将以JSON形式表示的大量数据转换为JSON-LD。我想用thisJSON-LDJava实现来实现这一点,但我不明白,我应该怎么做

我看了几本教程,在网上读了一些关于JSON-LD的东西,但不明白最简单的事情:如何将JSON转换成JSON-LD

例如,我在JSON中有以下代码:

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

我现在该怎么办?类似于context.add("example.com")的东西

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

共 (1) 个答案

  1. # 1 楼答案

    将“@context”条目添加到数据中

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

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

    作为测试,您可以将json转换为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

    _: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" .