如何使用Jsoup和Gson提取JSON字段

时间:2018-01-26 10:57:12

标签: java json gson jsoup

在我的计划中,我使用json连接到网址以检索Jsoup

以下是检索json [拥有subject = example]的方法:

private void result() throws IOException {
    Properties props = new Properties();
    props.setProperty("annotators", "tokenize,ssplit,pos,lemma,depparse,natlog,openie");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    List<String> list = newsList.getSelectedValuesList();
    for (String s : list) {
       Annotation doc = new Annotation(s);
       pipeline.annotate(doc); 
       for (CoreMap sentence : doc.get(CoreAnnotations.SentencesAnnotation.class)) {
            // Get the OpenIE triples for the sentence
            Collection<RelationTriple> triples =
         sentence.get(NaturalLogicAnnotations.RelationTriplesAnnotation.class);
            // Print the triples
            for (RelationTriple triple : triples) {
                /* replace space with "_" */
                String subject = triple.subjectLemmaGloss().replace(" ", "_");
                String object = triple.objectGloss().replace(" ", "_");
                String kb = "http://api.conceptnet.io/c/en/" + subject;
                Document docKb = Jsoup.connect(kb).get();
                String json = docKb.body().text();
                Gson gson = new Gson();
                Map<String, Object> asMap = gson.fromJson(json.toString(), Map.class);
                List<Map<String, Object>> edges = (List) asMap.get("edges");
                for (Map<String, Object> edge : edges) {
                    if (edge.containsKey("surfaceText") && edge.containsKey("weight")) {
                       txtAreaNews.append(edge.get("surfaceText").toString() + "\n"); 
                       txtAreaNews.append("Weight: " + edge.get("weight").toString());
                    }
                    txtAreaNews.append("\n");
                }
            }
        }
    }
}

这是我从html的网址中检索到的txtAreaNews.append(docKb.text());

 ConceptNet 5 API {
  "@context": [
    "http://api.conceptnet.io/ld/conceptnet5.5/context.ld.json",
    "http://api.conceptnet.io/ld/conceptnet5.5/pagination.ld.json"
  ],
  "@id": "/c/en/example",
  "edges": [
    {
      "@id": "/a/[/r/IsA/,/c/en/apology/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/apology/n",
        "label": "apology",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/apology"
      },
      "surfaceText": "[[apology]] is a type of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/IsA/,/c/en/example/n/,/c/en/admonition/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/admonition/n",
        "label": "admonition",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/admonition"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "surfaceText": "[[example]] is a type of [[admonition]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/IsA/,/c/en/example/n/,/c/en/information/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/information/n",
        "label": "information",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/information"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "surfaceText": "[[example]] is a type of [[information]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/IsA/,/c/en/exception/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/exception/n",
        "label": "exception",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/exception"
      },
      "surfaceText": "[[exception]] is a type of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/IsA/,/c/en/precedent/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/precedent/n",
        "label": "precedent",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/precedent"
      },
      "surfaceText": "[[precedent]] is a type of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/IsA/,/c/en/quintessence/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/quintessence/n",
        "label": "quintessence",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/quintessence"
      },
      "surfaceText": "[[quintessence]] is a type of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/IsA/,/c/en/sample/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/sample/n",
        "label": "sample",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/sample"
      },
      "surfaceText": "[[sample]] is a type of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/IsA/,/c/en/specimen/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/IsA",
        "label": "IsA"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/specimen/n",
        "label": "specimen",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/specimen"
      },
      "surfaceText": "[[specimen]] is a type of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/RelatedTo/,/c/en/exemplary/a/,/c/en/example/]",
      "dataset": "/d/wiktionary/en",
      "end": {
        "@id": "/c/en/example",
        "label": "example",
        "language": "en",
        "term": "/c/en/example"
      },
      "license": "cc:by-sa/4.0",
      "rel": {
        "@id": "/r/RelatedTo",
        "label": "RelatedTo"
      },
      "sources": [
        {
          "@id": "/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/en/]",
          "contributor": "/s/resource/wiktionary/en",
          "process": "/s/process/wikiparsec/1"
        },
        {
          "@id": "/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]",
          "contributor": "/s/resource/wiktionary/fr",
          "process": "/s/process/wikiparsec/1"
        }
      ],
      "start": {
        "@id": "/c/en/exemplary/a",
        "label": "exemplary",
        "language": "en",
        "sense_label": "a",
        "term": "/c/en/exemplary"
      },
      "surfaceText": null,
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/RelatedTo/,/c/en/exemplify/v/,/c/en/example/]",
      "dataset": "/d/wiktionary/en",
      "end": {
        "@id": "/c/en/example",
        "label": "example",
        "language": "en",
        "term": "/c/en/example"
      },
      "license": "cc:by-sa/4.0",
      "rel": {
        "@id": "/r/RelatedTo",
        "label": "RelatedTo"
      },
      "sources": [
        {
          "@id": "/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/en/]",
          "contributor": "/s/resource/wiktionary/en",
          "process": "/s/process/wikiparsec/1"
        },
        {
          "@id": "/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]",
          "contributor": "/s/resource/wiktionary/fr",
          "process": "/s/process/wikiparsec/1"
        }
      ],
      "start": {
        "@id": "/c/en/exemplify/v",
        "label": "exemplify",
        "language": "en",
        "sense_label": "v",
        "term": "/c/en/exemplify"
      },
      "surfaceText": null,
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/ar/مِثَال/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/ar/مِثَال/n",
        "label": "مِثَال",
        "language": "ar",
        "sense_label": "n",
        "term": "/c/ar/مِثَال"
      },
      "surfaceText": "[[مِثَال]] is a translation of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/ar/مَثَل/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/ar/مَثَل/n",
        "label": "مَثَل",
        "language": "ar",
        "sense_label": "n",
        "term": "/c/ar/مَثَل"
      },
      "surfaceText": "[[مَثَل]] is a translation of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/ca/escarment/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/ca/escarment/n",
        "label": "escarment",
        "language": "ca",
        "sense_label": "n",
        "term": "/c/ca/escarment"
      },
      "surfaceText": "[[escarment]] is a translation of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/ca/exemple/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/ca/exemple/n",
        "label": "exemple",
        "language": "ca",
        "sense_label": "n",
        "term": "/c/ca/exemple"
      },
      "surfaceText": "[[exemple]] is a translation of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/ca/lliçó/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/ca/lliçó/n",
        "label": "lliçó",
        "language": "ca",
        "sense_label": "n",
        "term": "/c/ca/lliçó"
      },
      "surfaceText": "[[lliçó]] is a translation of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/da/eksempel/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/da/eksempel/n",
        "label": "eksempel",
        "language": "da",
        "sense_label": "n",
        "term": "/c/da/eksempel"
      },
      "surfaceText": "[[eksempel]] is a translation of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/en/deterrent_example/n/,/c/en/example/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/deterrent_example/n",
        "label": "deterrent example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/deterrent_example"
      },
      "surfaceText": "[[deterrent example]] is a synonym of [[example]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/en/example/n/,/c/en/case/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/case/n",
        "label": "case",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/case"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "surfaceText": "[[example]] is a synonym of [[case]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/en/example/n/,/c/en/exemplar/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/exemplar/n",
        "label": "exemplar",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/exemplar"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "surfaceText": "[[example]] is a synonym of [[exemplar]]",
      "weight": 2.0
    },
    {
      "@id": "/a/[/r/Synonym/,/c/en/example/n/,/c/en/exercise/n/]",
      "dataset": "/d/wordnet/3.1",
      "end": {
        "@id": "/c/en/exercise/n",
        "label": "exercise",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/exercise"
      },
      "license": "cc:by/4.0",
      "rel": {
        "@id": "/r/Synonym",
        "label": "Synonym"
      },
      "sources": [
        {
          "@id": "/s/resource/wordnet/rdf/3.1",
          "contributor": "/s/resource/wordnet/rdf/3.1"
        }
      ],
      "start": {
        "@id": "/c/en/example/n",
        "label": "example",
        "language": "en",
        "sense_label": "n",
        "term": "/c/en/example"
      },
      "surfaceText": "[[example]] is a synonym of [[exercise]]",
      "weight": 2.0
    }
  ],
  "view": {
    "@id": "/c/en/example?offset=0&limit=20",
    "firstPage": "/c/en/example?offset=0&limit=20",
    "nextPage": "/c/en/example?offset=20&limit=20",
    "paginatedProperty": "edges"
  }
}

surfaceText的示例为null:

{
   "@id": "/a/[/r/RelatedTo/,/c/en/exemplary/a/,/c/en/example/]",
   "dataset": "/d/wiktionary/en",
   "end": {
     "@id": "/c/en/example",
     "label": "example",
     "language": "en",
     "term": "/c/en/example"
   },
   "license": "cc:by-sa/4.0",
  "rel": {
     "@id": "/r/RelatedTo",
     "label": "RelatedTo"
   },
   "sources": [
     {
       "@id": "/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/en/]",
       "contributor": "/s/resource/wiktionary/en",
       "process": "/s/process/wikiparsec/1"
     },
     {
       "@id": "/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]",
       "contributor": "/s/resource/wiktionary/fr",
       "process": "/s/process/wikiparsec/1"
     }
   ],
   "start": {
     "@id": "/c/en/exemplary/a",
     "label": "exemplary",
     "language": "en",
     "sense_label": "a",
     "term": "/c/en/exemplary"
   },
   "surfaceText": null,
   "weight": 2.0
}

我想问一下,如何从Jsoup或Gson的上述数据中获取"surfaceText""weight"

1 个答案:

答案 0 :(得分:2)

您可以使用Gson将JSON反序列化为Map,然后询问Map

以下是一个例子:

String kb = "http://api.conceptnet.io/c/en/example";
Document docKb = Jsoup.connect(kb).get();
String json = docKb.body().text();

Gson gson = new Gson();
Map<String, Object> asMap = gson.fromJson(json, Map.class);
List<Map<String, Object>> edges = (List) asMap.get("edges");
for (Map<String, Object> edge : edges) {
    // check that the response contains a surfaceText
    if (edge.containsKey("surfaceText")) {
        // check that the surfaceText value is non-null
        String surfaceText = (String) edge.get("surfaceText");
        if (surfaceText != null) {
            System.out.println(edge.get("surfaceText"));
        }
    }
    if (edge.containsKey("weight")) {
        System.out.println(edge.get("weight"));
    }
}

此代码将打印出来:

[[apology]] is a type of [[example]]
2.0
[[example]] is a type of [[admonition]]
2.0
[[example]] is a type of [[information]]
2.0
[[exception]] is a type of [[example]]
2.0
... etc