Джексон JSON потокового API для нескольких случаев - PullRequest
0 голосов
/ 21 марта 2011

Я пытаюсь проанализировать некоторые json, используя Джексона, и я основал свой код на примерах на сайте, но я не получаю ошибку синтаксического анализа, поскольку поле возвращает ноль.я перечислил мой код разбора и мои классы ниже, может кто-нибудь посоветовать мне, где я ошибся, пожалуйста?

String json2 = "[{\"odd\":\"110601\",\"oda\":\"MAN\",\"odt\":\"0655\",\"oad\":0,\"oaa  \":\"IBZ\",\"oat\":\"1045\",\"rdd\":7,\"rda\":\"IBZ\",\"rdt\":\"1130\",\"rad\":7,\"raa\":\"MAN\",\"rat\":\"1315\",\"d\":7,\"sp\":[{ \"s\": \"test\", \"p\": \"1\" },{ \"s\": \"test\", \"p\": \"2\" },{ \"s\": \"test\", \"p\": \"3\" },{ \"s\": \"test\", \"p\": \"4\" }]}]";
    JsonFactory f = new JsonFactory();
    JsonParser jp = f.createJsonParser(json2);
    Flight2 flight2 = new Flight2();
    jp.nextToken(); // will return JsonToken.START_OBJECT (verify?)
    while (jp.nextToken() != JsonToken.END_OBJECT) {
        String fieldname = jp.getCurrentName();
        jp.nextToken(); // move to value, or START_OBJECT/START_ARRAY
        if ("sp".equals(fieldname)) { // contains an object
            FlightSP flightsp = new FlightSP();
            while (jp.nextToken() != JsonToken.END_OBJECT) {
                String namefield = jp.getCurrentName();
                jp.nextToken(); // move to value
                if ("s".equals(namefield)) {
                    flightsp.setS(jp.getText());
                }else if ("p".equals(namefield)) {
                    flightsp.setP(jp.getText());
                } else {
                    throw new IllegalStateException("Unrecognized field '"+fieldname+"'!");
                }
            }
            flight2.setFlightSP(flightsp);
        }else if ("odd".equals(fieldname)){
            flight2.setOdd(jp.getText());
        }else if ("oda".equals(fieldname)){
            flight2.setOda(jp.getText());
        }else if ("odt".equals(fieldname)){
            flight2.setOdt(jp.getText());
        }else if ("oad".equals(fieldname)){
            flight2.setOad(jp.getText());
        }else if ("oaa".equals(fieldname)){
            flight2.setOaa(jp.getText());
        }else if ("oat".equals(fieldname)){
            flight2.setOat(jp.getText());
        }else if ("rdd".equals(fieldname)){
            flight2.setRdd(jp.getText());
        }else if ("rda".equals(fieldname)){
            flight2.setRda(jp.getText());
        }else if ("rdt".equals(fieldname)){
            flight2.setRdt(jp.getText());
        }else if ("rad".equals(fieldname)){
            flight2.setRad(jp.getText());
        }else if ("raa".equals(fieldname)){
            flight2.setRaa(jp.getText());
        }else if ("rat".equals(fieldname)){
            flight2.setRat(jp.getText());
        }else {
            throw new IllegalStateException("Unrecognized field '"+fieldname+"'!");
        }
    }
    jp.close(); // ensure resources get cleaned up timely and properly

public class Flight2{

@Id
Long id;
private String _odd;//out_departure_date
private String _oda;//out_departure_iata_code;
private @Unindexed String _odt;//out_departure_time;
private @Unindexed String _oad;//out_arrival_date;
private String _oaa;//out_arrival_iata_code;
private @Unindexed String _oat;//out_arrival_time;
private @Unindexed String _rdd;//rtn_departure_date;
private @Unindexed String _rda;//rtn_departure_iata_code;
private @Unindexed String _rdt;//rtn_departure_time;
private @Unindexed String _rad;//rtn_arrival_date;
private @Unindexed String _raa;//rtn_arrival_iata_code;
private @Unindexed String _rat;//rtn_arrival_time;
private String _d;//duration;
private @Unindexed FlightSP _flightsp;//table containing just supplier and price 

public void setFlightSP(FlightSP flightsp){_flightsp = flightsp;}
public void setOdd(String odd) {_odd = odd;}
public void setOda(String oda) {_oda = oda;}
public void setOdt(String odt) {_odt = odt;}
public void setOad(String oad) {_oad = oad;}
public void setOaa(String oaa) {_oaa = oaa;}
public void setOat(String oat) {_oat = oat;}
public void setRdd(String rdd) {_rdd = rdd;}
public void setRda(String rda) {_rda = rda;}
public void setRdt(String rdt) {_rdt = rdt;}
public void setRad(String rad) {_rad = rad;}
public void setRaa(String raa) {_raa = raa;}
public void setRat(String rat) {_rat = rat;}

public FlightSP getFlightSP(){return _flightsp;}
public String getOdd() {return _odd;}
public String getOda() {return _oda;}
public String getOdt() {return _odt;}
public String getOad() {return _oad;}
public String getOaa() {return _oaa;}
public String getOat() {return _oat;}
public String getRdd() {return _rdd;}
public String getRda() {return _rda;}
public String getRdt() {return _rdt;}
public String getRad() {return _rad;}
public String getRaa() {return _raa;}
public String getRat() {return _rat;}
}

public class FlightSP {
@Id
Long id;
private @Unindexed String _s, _p;

public void setS(String s) {_s = s;}
public void setP(String p) {_p = p;}

public String getS() {return _s;}
public String getP() {return _p;}
}

1 Ответ

1 голос
/ 21 марта 2011

Это не точный ответ, но мне интересно, почему вы не используете привязку данных, а ручной код, чтобы сделать то же самое?Привязка данных сократит код до пары строк, если это применимо.

Но что именно является ошибкой?А что за JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...