当前位置: 首页 > 面试题库 >

Java中将JSON序列化为JSON-LD的代码示例?

凌宏大
2023-03-14
问题内容

我需要将一些以形式表示的数据转换JSONJSON-LD。我想使用此 JSON-LD Java实现来执行此操作,但我不明白该怎么办。

我看了几本教程,并JSON-LD在Internet上阅读了一些有关内容的文章,但不了解最简单的东西:如何转换JSONJSON-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();

问题答案:

在您的数据中添加一个“ @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" .


 类似资料:
  • 问题内容: 我正在客户端和Django服务器之间发送信息,并且我想对此使用JSON。我正在发送简单的信息-字符串列表。我尝试使用,但是当我这样做时, 看来这只能用于Django对象。如何序列化简单的Python对象? 问题答案: 你可以使用纯Python执行此操作:

  • 问题内容: 我在Android上的Java中具有以下枚举,并且我希望能够将传入的JSON字符串/对象中的整数反序列化为此Enum类型。我一直在Jackson和GSON上受到欢迎,但在我正在使用的JSON.org包上却什么也没有。 有没有简单的方法可以做到这一点,或者我需要更改JSON解码器?谢谢。 问题答案: 将返回您的数组,然后可以遍历数组并检查

  • 我在Android上的Java中有以下枚举,我希望能够将传入的JSON字符串/对象中的整数反序列化为该枚举类型。我在杰克逊和GSON上得到了点击,但在json.org包上没有,我正在使用。 是否有一个简单的方法来做到这一点,或者我需要改变JSON解码器?谢了。

  • 问题内容: 建议使用保留的字段名称将a序列化为json 的建议方式是什么? 将a 序列化为json只会导致值被序列化,并且字段名称在转换中会丢失。我希望在json大小化时也保留这些字段,因此请执行以下操作: 上面的代码按照我的期望序列化为json,并且在我使用的其他地方(属性访问等)中起作用,除了在迭代过程中出现非元组之类的结果外(对于我的用例来说这很好)。 在保留字段名称的情况下转换为json的

  • 问题内容: 如何在JavaScript中将对象序列化为JSON? 问题答案: 您正在寻找。

  • 问题内容: 我正在尝试创建类实例的JSON字符串表示形式并且遇到困难。假设该类的构建如下: 像这样对json.dumps进行调用: 失败了,并告诉我testclass不可JSON序列化。 我也尝试过使用pickle模块: 它提供类实例信息,但不提供类实例的序列化内容。 我究竟做错了什么? 问题答案: 基本问题是,JSON编码器仅知道默认情况下如何序列化一组有限的对象类型(所有内置类型)。在此处列出