Android 如何使用动态响应键解析json
如何在改造中解析以下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,
{
"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赋予了什么值