2

Jackson を使用して API の結果を解析していますが、これはうまく機能しているようです。

ジャワ:

public static void jsonIn(String st){
         try {
        JsonFactory jfactory = new JsonFactory();
        /*** read from URL ***/
        JsonParser jParser = jfactory.createJsonParser(new URL(st));
        // loop until token equal to "}"
        while (jParser.nextToken() != JsonToken.END_ARRAY) {
            String fieldname = jParser.getCurrentName();
            if ("id".equals(fieldname)) {
              // current token is "id",
                      // move to next, which is "id"'s value
            try{
              jParser.nextToken();
                }
            catch (Exception e){

            }
              System.out.println(jParser.getText()); // display id
            }
          }
          jParser.close();
         } catch (JsonGenerationException e) {
          e.printStackTrace();
         } 

      }

質問:

ただし、必要な結果(フィールド:「id」)は配列「items」にあります。上記のコードは、最初の配列「queries」から始まり、「id」という名前の 1 つの要素のみを送信しますが、これは気にしません。その後、while ステートメントに基づいて解析を停止し、"items" 配列に到達しません。必要な「id」フィールドを取得できるように、興味のある配列「items」にスキップするように上記のコードを変更するにはどうすればよいですか?

json:

{
 "app": "Sale",
 "avail": {
  "type": "application/json",
},
 "queries": {
  "unAvailURIs": [
   {
    "id": "1sdf6gf3jf80dhb3",
    "results": "57",
    "searchTerms": "lycos.com",
    "startIndex": 11
   }
  ],
  "apiSource": [
   {
    "title": "go****y",
    "totalResults": "579000",
    "auctionPhrase": "lycos.com",
    "count": 10,
    "startIndex": 1,
    "id": "in",
   }
  ]
 },
 "pullAPI": {
  "search": "lycos.com"
 },
 "searchInformation": {
  "searchTime": 0.025345,
  "totalResults": "57600100",
 },
 "items": [
  {
   "id": "GD172993",
   "title": "lycos.com",
   ....
4

1 に答える 1

4

私が探していた 1 つの SO 投稿を見逃したようです: Parsing JSON Bing results with Jackson。説明してくれた @fge に感謝ます。トップステートメント の先頭を次のように置き換えただけです。ObjectMapperreadTree()
try

try {    
    JsonFactory jfactory = new JsonFactory();
    JsonParser jParser = jfactory.createJsonParser(new URL(st));
    ObjectMapper mapper = new ObjectMapper();
    JsonNode input = mapper.readTree(jParser);
    final JsonNode results = input.get("items");
    // loop until token equal to "}"
    for (final JsonNode element: results) {
        JsonNode fieldname = element.get("id");
        System.out.println(fieldname.toString());
于 2013-01-18T04:03:44.643 に答える