Правильно наберите в разборе JSON - PullRequest
0 голосов
/ 06 июня 2018

При синтаксическом анализе ответа json один из ключей может иметь строковое значение или значение NULL.Я анализирую ответ как:

  @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
           "status",
           "code",
           "exception"
    })

    public class Response {

    private String status;        
    private long code; 
    private String exception;


    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }


    public long getCode() {
        return code;
    }

    public void setCode(long code) {
        this.code = code;
    }


    public String getException() {
        return exception;
    }

    public void setException(String exception) {
        this.exception = exception;
    }

Когда я получаю значение NULL, у меня есть ошибка.Как я могу сделать это правильно?

Я пытаюсь @JsonInclude (JsonInclude.Include.NON_NULL), но это не работает

public class JsonParserResponse  throws UnsupportedEncodingException, JsonParseException, IOException {
    Response resp= new Response();
try{
        JSONObject outerObject = new JSONObject({"status":null,"code":0,"exception":""} );
       resp.setStatus(outerObject.getString("status")); System.out.printf("name=%s , value=%s\n", "status", outerObject.getString("status"));
             resp.setCode(outerObject.getInt("code")); System.out.printf("name=%s , value=%s\n", "code",outerObject.getInt("code"));
             resp.setException(outerObject.getString("exception")); System.out.printf("name=%s , value=%s\n","exception" ,outerObject.getString("exception"));
}catch(Exception e) {
            e.printStackTrace();
        }        

У меня ошибка ^

JSONObject["status"] not a string.
    at org.json.JSONObject.getString(JSONObject.java:639)
    at ru.JsonParserResponse.parseResult(JsonParserResponse.java:161)
    at ru.JsonParserResponse.main(JsonParserResponse.java:74)

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.annotation.JsonInclude.Include;

@ JsonInclude (Include.NON_NULL)Попробуйте это однажды в своем классе, надеюсь, это поможет вам.

@ JsonInclude (Include.NON_NULL)public class Response {// код .....}

0 голосов
/ 06 июня 2018

Этот код должен работать (похоже, у вас неправильное форматирование json):

    String json = "{\"status\":null,\"code\":0,\"exception\":\"\"}";

    JSONObject outerObject = new JSONObject(json); 

    Response resp = new Response();

    resp.setStatus(outerObject.getString("status"));
    resp.setCode(outerObject.getInt("code"));
    resp.setException(outerObject.getString("exception"));
0 голосов
/ 06 июня 2018

это поможет

добавить @JsonIgnoreProperties(ignoreUnknown =true) к классу Response, который будет игнорировать нулевые значения (com.fasterxml.jackson.annotation.)

и нет необходимости использовать JsonProperty приимя вашей переменной совпадает с именем вашего JsonProperty

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