A code example of serialization JSON to JSON-LD in Java?

前端 未结 1 1350
独厮守ぢ
独厮守ぢ 2021-01-20 23:36

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,

1条回答
  •  耶瑟儿~
    2021-01-21 00:11

    Add a '@context' entry to your data.

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

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

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

    With pom.xml

       
            org.eclipse.rdf4j
            rdf4j-runtime
            2.2
            pom
        
        
            com.github.jsonld-java
            jsonld-java
            0.10.0
        
    

    It will print your json string as rdf NTRIPLES

    _:b0  "20"^^ .
    _:b0  "Andreas" .
    _:b0  "example.com" .
    _:b0  "student" .
    

    0 讨论(0)
提交回复
热议问题