복붙노트

[ANDROID] 개조를 사용하여 구문 분석 동적 키 JSON 문자열

ANDROID

개조를 사용하여 구문 분석 동적 키 JSON 문자열

해결법


  1. 1.귀하의 resultInside 클래스는 JSON에 존재하지 않는 별도의 오브젝트 레이어를 추가하고있다. 데이터 클래스 결과 필드로지도를 이동하십시오.

    귀하의 resultInside 클래스는 JSON에 존재하지 않는 별도의 오브젝트 레이어를 추가하고있다. 데이터 클래스 결과 필드로지도를 이동하십시오.

    public class Data {
        @SerializedName("results")
        @Expose
        private Map<String, Vitals> result;
    
        //....
    }
    

  2. 2.이 작업을 수행하는 더 좋은 방법이 될 것이다 :

    이 작업을 수행하는 더 좋은 방법이 될 것이다 :

    ----------------------
    
    public class Report {
            @SerializedName("data")
            @Expose
            private Data data;
    
    ----------------------
    
    public class Data {
    
    
        public HashMap<String, DataValues> dataValues;
    
    
        public Data() {
            this.dataVaues = new HashMap<>();
        }
    }
    
    -----------------------------
    

    다음과 같은 파서 클래스를 생성 :

    public class DataParser implements JsonDeserializer<Data> {
    
    
        @Override
        public Data deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    
            Data result = new Data();
    
    
            try {
                final HashMap<String, DataValues> map = readServiceUrlMap(json.getAsJsonObject());
    
                if(map != null) {
                    result.dataValues = map;
                }
    
            }catch (JsonSyntaxException ex){
                return null;
            }
    
            return result;
        }
    
    
        private HashMap<String, DataValues> readServiceUrlMap(final JsonObject jsonObject) throws JsonSyntaxException {
    
            if(jsonObject == null) {
                return null;
            }
            Gson gson = new Gson();
    
            HashMap<String, DataValues> products = new HashMap<>();
    
            for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
    
                String key = entry.getKey();
                DataValues value = gson.fromJson(entry.getValue(), DataValues.class);
                products.put(key, value);
            }
            return products;
        }
    
    
    ----------------------------------------------
    

    그 후, 당신의 ApiClient 클래스에서이 입력

    public class ApiClient {
    
    
        private static Retrofit retrofit = null;
    
        public static Retrofit getClient(String baseUrl) {
    
            if(retrofit == null) {
    
                GsonBuilder gsonBuilder = new GsonBuilder();
                gsonBuilder.registerTypeAdapter(Data.class, new DataParser());
    
                retrofit = new Retrofit.Builder()
                        .baseUrl(baseUrl)
                        .addConverterFactory(GsonConverterFactory.create(gsonBuilder.create()))
                        .build();
    

    나는이 사람을 도움이되기를 바랍니다

  3. from https://stackoverflow.com/questions/33758601/parse-dynamic-key-json-string-using-retrofit by cc-by-sa and MIT license