Java中序列化JSON到JSON-LD的代码示例?
我有一个任务,虽然我需要将以JSONforms表示的大量数据转换为JSON-LD。 我想用这个 JSON-LD Java实现来做这个,但我不明白,我该怎么办。
我在网站上观看过教程并在互联网上阅读有关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\Albert\input.json"); Object jsonObject = JsonUtils.fromInputStream(inputStream); Map context = new HashMap(); JsonLdOptions options = new JsonLdOptions();
在数据中添加“@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 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(); } }
用pom.xml
org.eclipse.rdf4j rdf4j-runtime 2.2 pom com.github.jsonld-java jsonld-java 0.10.0
它会将您的json字符串打印为rdf NTRIPLES
_:b0 "20"^^ . _:b0 "Andreas" . _:b0 "example.com" . _:b0 "student" .