Сделать json для pojo из массива без индекса

Я использую дооснащение, и у меня есть такой класс контактов:

public class MyContact {

    private String response;
    private String message;

    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

}

и есть часть моего json:

{"Response":"Success","Message":"YES","Data":{"Info":{"id":"1" , "name":"leon"}}}

Я использую дооснащение, чтобы получить этот JSON

Вопрос в том, как им управлять по pojo в android.I Я не хочу получать часть данных, только ответ и сообщение

Моя модифицированная часть приложения полностью хороша и работает

Вам необходимо выполнить синтаксический анализ JSON, чтобы извлечь только соответствующие поля, ссылающиеся на tutorialspoint.com/android/android_json_parser.htm

Akshay Katariya 25.04.2018 06:11

Я использую модернизацию, чтобы получить этот json @AkshayKatariya

Hadi Ahmadi 25.04.2018 06:19

вы можете попробовать этот jsonschema2pojo.org, он принимает строку json в качестве входных данных и предоставит вам класс модели

Akram 25.04.2018 07:02

помогите мне решить это @Fred

Hadi Ahmadi 25.04.2018 07:21
0
4
195
3

Ответы 3

Вам нужно будет выполнить синтаксический анализ JSON следующим образом

String res = "{\"Response\":\"Success\",\"Message\":\"YES\",\"Data\":{\"Info\":{\"id\":\"1\" , \"name\":\"leon\"}}}";

MyContact model =new MyContact();

if (res!=null);//Retrofit response 
    try
    {
        JSONObject jo = new JSONObject(res);
        model.setResponse(jo.optString("Response"));
        model.setMessage(jo.optString("Message"));

        Log.d("Akshay","Response = "+model.getResponse() + " " +model.getMessage());
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }

после запроса от метода модернизации onFailure возвращает мне. у меня нет ответа там

Hadi Ahmadi 25.04.2018 06:27

Тогда что-то не так с вашим кодом модернизации, вы должны получить этот JSON с сервера внутри onResponse .

Akshay Katariya 25.04.2018 06:29

Создайте класс Serializable -

class Response implements Serializable{
    @SerializedName("Response")
    private String response;
    @SerializedName("Message")
    private String message;

    public Response(){}

    public Response(String response, String message){
        this.message = message;
        this.response = response;
    }

    //todo getter and setter methods
}

Теперь проанализируйте данные JSON с помощью Gson.

String jsonString = "{\"Response\":\"Success\",\"Message\":\"YES\",\"Data\":{\"Info\":{\"id\":\"1\" , \"name":\"leon\"}}}";
Response responseObject = new Gson()
                          .fromJson(
                             jsonString,
                             Response.class
                          );

в этом классе POJO выше вы можете добавить другие данные, если хотите. чтобы избежать какого-либо конкретного свойства для сериализации и десериализации, вы можете использовать стратегия исключения.

Для получения дополнительной информации об этом вы можете перейти на здесь.

Ваш ответ хорош, но может быть случай, когда вам понадобятся эти поля из модели POJO, чтобы установить в них значение и использовать как Parcelable

Akshay Katariya 25.04.2018 06:36

я не понимаю @AkshayKatariya. не могли бы вы объяснить немного больше.

Sagar Nayak 25.04.2018 06:42

@AkshayKatariya для вашего вопроса просто нужно реализовать Serializable для Response.Class.

Hitesh Sarsava 25.04.2018 06:52

Если вы хотите избежать использования каких-либо данных ниже ключевого слова преходящий

и согласно приведенному выше классу json pojo будет так ..

public class Data {

@SerializedName("Info")
private Info info;

public Info getInfo() {
    return info;
}

public void setInfo(Info info) {
    this.info = info;
}

}

public class Info {

@SerializedName("id")
private String id;
@SerializedName("name")
private String name;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

затем окончательный ответ pojo class ..

public class ResponseData {

@SerializedName("Response")
private String response;
@SerializedName("Message")
private String message;
@SerializedName("Data")
transient 
private Data data;

public String getResponse() {
    return response;
}

public void setResponse(String response) {
    this.response = response;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public Data getData() {
    return data;
}

public void setData(Data data) {
    this.data = data;
}

}

Другие вопросы по теме