在架构未知时从 java 中的本地主机提取服务器解析 DBpedia JSON

Parsing DBpedia JSON from localhost extraction server in java when the schema isn't known

这可能是对一个非常新手的问题的快速回答。我无法思考如何从本地主机获取 JSON 文本 dbpedia 提取服务器 运行。服务器运行很好,我跟着official instructions

我已经阅读了关于在 java 中解析 JSON 的其他 Whosebug 问题,我难以理解的是当架构或结构未知时如何解析 JSON。

例如,在我的代码中,我尝试从本地主机获取 JSON 并将其放入 java 对象中。但是在线解析 JSON 的所有示例都使用预先设计的 java 对象,并且所有 JSON 键都映射到对象的字段。 (即员工 class:姓名、工作、电子邮件、id,phone)

String sURL = "http://localhost:9999/server/extraction/en/extract?title=" + wikipage + "&revid=&format=rdf-json&extractors=custom"; //just a string

URL url = new URL(sURL);
Reader pageReader = new InputStreamReader(url.openConnection().getInputStream());

Gson g = new Gson();
JsonReader jr = new JsonReader(new InputStreamReader((InputStream) request.getContent()));
jr.setLenient(true);

JsonParser jp = new JsonParser();
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //convert the input stream to a json element
JsonObject rootobj = root.getAsJsonObject(); //may be an array, may be an object.

我现在有这个 "json object" 用于电影 "Blue Velvet" 我可以 parse/iterate 使用 jr.hasNext() 或 rootobj.getAsJsonArray()。 我这样做正确吗?

我觉得我正在重新发明轮子。 是否有解析 Java 中的 DBpedia JSON 对象的标准方法?

至少 Jackson JSON 库允许您将传入的 JSON 解析为 Map。如果 JSON 的键和值可以是任何类型,那么你需要使用 Map<Object, Object>,这有点麻烦,但无论如何这应该有效:

ObjectMapper mapper = new ObjectMapper();
Map<Object, Object> parsedJSON =  mapper.readValue(incomingJSON,
                        mapper.getTypeFactory().constructMapType(
                          LinkedHashMap.class,
                          Object.class, 
                          Object.class));