1

GSONで、私はこれを書くことができます

JsonStreamParser parser = new JsonStreamParser(reader);
System.out.println(parser.next());

ストリームがJSONオブジェクトで構成されている場合は、オブジェクト全体が文字列として出力されます。

ジャクソンでそれを行う簡単な方法はありますか、それとも例で使用されているwhileループパターンを使用する必要がありますか?

したがって、最初のオブジェクトが次の場合:{"id":1、 "name": "Foo"、 "price":123、 "tags":["Bar"、 "Eek"]、 "stock":{"warehouse" :300、「小売」:20}}

印刷される最初の行は次のようになります。

{"id":1、 "name": "Foo"、 "price":123、 "tags":["Bar"、 "Eek"]、 "stock":{"warehouse":300、 "retail": 20}}

4

1 に答える 1

0

ストリーミングモードでは、すべてのJSON「文字列」が単一のトークンと見なされ、各トークンはインクリメンタルに処理されるため、「インクリメンタルモード」と呼びます。例えば、

{
   "name":"mkyong"
}
Token 1 = “{“
Token 2 = “name”
Token 3 = “mkyong”
Token 4 = “}”

上記のjsonテキストを解析するために次のコードを書くことができます

import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.JsonMappingException;

public class JacksonStreamExample {
   public static void main(String[] args) {

     try {

    JsonFactory jfactory = new JsonFactory();

    /*** read from file ***/
    JsonParser jParser = jfactory.createJsonParser(new File("c:\\user.json"));

    // loop until token equal to "}"
    while (jParser.nextToken() != JsonToken.END_OBJECT) {

        String fieldname = jParser.getCurrentName();
        if ("name".equals(fieldname)) {

          // current token is "name",
                  // move to next, which is "name"'s value
          jParser.nextToken();
          System.out.println(jParser.getText()); // display mkyong

        }

        if ("age".equals(fieldname)) {

          // current token is "age", 
                  // move to next, which is "name"'s value
          jParser.nextToken();
          System.out.println(jParser.getIntValue()); // display 29

        }

        if ("messages".equals(fieldname)) {

          jParser.nextToken(); // current token is "[", move next

          // messages is array, loop until token equal to "]"
          while (jParser.nextToken() != JsonToken.END_ARRAY) {

                     // display msg1, msg2, msg3
             System.out.println(jParser.getText()); 

          }

        }

      }
      jParser.close();

     } catch (JsonGenerationException e) {

      e.printStackTrace();

     } catch (JsonMappingException e) {

      e.printStackTrace();

     } catch (IOException e) {

      e.printStackTrace();

     }

  }

}

出力

mkyong 29

msg 1

msg 2

msg 3

于 2012-08-18T02:27:11.277 に答える