Android 如何使用动态响应键解析json

Android 如何使用动态响应键解析json,android,json,gson,retrofit2,Android,Json,Gson,Retrofit2,如何在改造中解析以下json响应 { "MH46AF4149": [ { "distance": 74, "date": "23-09-2019" }, { "distance": 97, "date": "24-09-2019" }, { "distance": 91, "date": "25-09-2019" }, { "distance": 80,

如何在改造中解析以下json响应

{
  "MH46AF4149": [
    {
      "distance": 74,
      "date": "23-09-2019"
    },
    {
      "distance": 97,
      "date": "24-09-2019"
    },
    {
      "distance": 91,
      "date": "25-09-2019"
    },
    {
      "distance": 80,
      "date": "26-09-2019"
    },
    {
      "distance": 91,
      "date": "27-09-2019"
    },
    {
      "distance": 16,
      "date": "28-09-2019"
    }
  ]
}
MH46AF4149是一个
动态值
,它针对每个新响应不断变化


我正在将客户机与GsonConverterFactory一起使用。如何填充模型类。我应该使用哪个注释@Expose不起作用

您需要使用键迭代器来获取此动态键,如下所示:

首先将您的Json响应存储到一个JSONObject

JSONObject mainJSONObj=new JSONObject(responseString);

// get all keys from mainJSONObj
Iterator<String> iterator = mainJSONObj.keys();
  while (iterator.hasNext()) {
    String key = iterator.next();
    Log.e("Your Dynamic Key: ","-> "+key);
  }
JSONObject mainJSONObj=新的JSONObject(responseString);
//从mainJSONObj获取所有密钥
迭代器迭代器=mainJSONObj.keys();
while(iterator.hasNext()){
String key=iterator.next();
Log.e(“您的动态键:”,“->”+键);
}
您的2呼叫应如下所示:

Call<String> call = mApiInterface.myApi(yourBodyParams);

call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {

                JSONObject mainJSONObj=new JSONObject(response);

                // get all keys from mainJSONObj
                Iterator<String> iterator = mainJSONObj.keys();
                while (iterator.hasNext()) {
                    String key = iterator.next();
                    Log.e("Your Dynamic Key: ","-> "+key);

                    JSONArray jsonArray = (JSONArray) mainJSONObj.getJSONArray(key);

                    if(jsonArray!=null){

                        for (int i = 0 ; i < jsonArray.length();i++){
                            JSONObject jsonObject1 = jsonArray.getJSONObject(i);

                            String distance=jsonObject1.getString("distance");
                            String date=jsonObject1.getString("date");

                            Log.e("distance: ","-> "+distance);
                            Log.e("date: ","-> "+date);
                        }
                    }
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                t.printStackTrace();
            });
Call Call=mApiInterface.myApi(yourBodyParams);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
JSONObject mainJSONObject=新JSONObject(响应);
//从mainJSONObj获取所有密钥
迭代器迭代器=mainJSONObj.keys();
while(iterator.hasNext()){
String key=iterator.next();
Log.e(“您的动态键:”,“->”+键);
JSONArray JSONArray=(JSONArray)mainJSONObj.getJSONArray(key);
if(jsonArray!=null){
for(int i=0;i”+距离);
Log.e(“日期:”,“->”+日期);
}
}
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
t、 printStackTrace();
});
这对我有帮助;希望这也能对您有所帮助。

遵循以下代码

JSONObject response = new JSONObject(responseString);
Iterator<?> keys = response.keys();
while( keys.hasNext() ) {
    String key = (String)keys.next();
    if ( response.get(key) instanceof JSONObject ) {
        JSONArray array = response.getJSONArray(key);
        for(int i = 0; i < array.length(); i++){
            JSONObject element = array.getJSONObject(i);
            //now use this array object to get strings
        }
    }
}
public class Car {

        private String distance;
        private String date;

    }



Gson gson = new Gson();

    Type listType = new TypeToken<List<Car>>() {}.getType();
    List<Car> carList = null;
    try {
        jsonResponse = new JSONObject(response);

        Iterator<String> keys = jsonResponse.keys();
        while (keys.hasNext()) {
            String key = (String) keys.next();
            if (jsonResponse.get(key) instanceof JSONArray) {
                JSONArray array = jsonResponse.getJSONArray(key);
               carList= gson.fromJson(array.toString(), listType);

                if (carList != null && carList.size() > 0) {

                }

            }
        }


    } catch (JSONException e) {
        e.printStackTrace();
    }
JSONObject response=新的JSONObject(responseString);
迭代器键=response.keys();
while(keys.hasNext()){
字符串键=(字符串)键。下一步();
if(JSONObject的response.get(key)instanceof){
JSONArray数组=response.getJSONArray(key);
对于(int i=0;i
您可以获得这样的钥匙

//if you have single key at that time use below code

 try {
           JSONObject jsonObject = new JSONObject(result.tostring);
            Iterator<String> keys = jsonObject.keys();
            String str_Name=keys.next();
            JSONArray jsonElements = (JSONArray) jsonObject.getJSONArray(str_Name);

//if you have multiple key you can get by for loop or while loop 

            while( keys.hasNext() ) {
                String key = (String)keys.next();
                JSONArray jsonElement = (JSONArray) jsonObject.getJSONArray(str_Name);
                for (int i = 0 ; i < jsonElement.length();i++){
                   JSONObject jsonObject1 = jsonElement.getJSONObject(i);
                }

                }
            } catch (JSONException e1) {
            e1.printStackTrace();
        }


//如果您当时只有一个键,请使用下面的代码
试一试{
JSONObject JSONObject=新的JSONObject(result.tostring);
迭代器keys=jsonObject.keys();
字符串str_Name=keys.next();
JSONArray jsonElements=(JSONArray)jsonObject.getJSONArray(str_Name);
//如果您有多个关键点,您可以通过for循环或while循环获得
while(keys.hasNext()){
字符串键=(字符串)键。下一步();
JSONArray jsonElement=(JSONArray)jsonObject.getJSONArray(str_Name);
for(int i=0;i
希望这对您有所帮助

public class Car {

        private String distance;
        private String date;

    }



Gson gson = new Gson();

    Type listType = new TypeToken<List<Car>>() {}.getType();
    List<Car> carList = null;
    try {
        jsonResponse = new JSONObject(response);

        Iterator<String> keys = jsonResponse.keys();
        while (keys.hasNext()) {
            String key = (String) keys.next();
            if (jsonResponse.get(key) instanceof JSONArray) {
                JSONArray array = jsonResponse.getJSONArray(key);
               carList= gson.fromJson(array.toString(), listType);

                if (carList != null && carList.size() > 0) {

                }

            }
        }


    } catch (JSONException e) {
        e.printStackTrace();
    }
公车{
私有字符串距离;
私有字符串日期;
}
Gson Gson=新的Gson();
类型listType=newTypeToken(){}.getType();
列表carList=null;
试一试{
jsonResponse=新的JSONObject(响应);
迭代器keys=jsonResponse.keys();
while(keys.hasNext()){
字符串键=(字符串)键。下一步();
if(jsonResponse.get(key)instanceof JSONArray){
JSONArray数组=jsonResponse.getJSONArray(键);
carList=gson.fromJson(array.toString(),listType);
如果(carList!=null&&carList.size()>0){
}
}
}
}捕获(JSONException e){
e、 printStackTrace();
}

您确定每次都会得到不同的钥匙吗?或者每次都会得到不同的日期和距离?每次都会得到不同的钥匙(Vehicleno)。参数距离和日期是恒定的请检查我的更新答案。但是我如何定义我的pojo类。我对此很陌生。我给@SerializedName赋予了什么值