Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态解析JSON | Android_Android_Arrays_Json_Gson - Fatal编程技术网

动态解析JSON | Android

动态解析JSON | Android,android,arrays,json,gson,Android,Arrays,Json,Gson,我收到了如上所述的响应,我想使用GSON将其解析为Java对象,请告诉我应该如何解析此JSON?这可能会对您有所帮助 { "page" : 0, "pageSize" : 15, "totalPageCount" : 5, "data" : { "020" : "Abarth", "040" : "Alfa Romeo", "042" : "Alpina", "043" : "Alpine", "057" : "Aston Mart

我收到了如上所述的响应,我想使用GSON将其解析为Java对象,请告诉我应该如何解析此JSON?

这可能会对您有所帮助

    {
  "page" : 0,
  "pageSize" : 15,
  "totalPageCount" : 5,
  "data" : {
    "020" : "Abarth",
    "040" : "Alfa Romeo",
    "042" : "Alpina",
    "043" : "Alpine",
    "057" : "Aston Martin",
    "060" : "Audi",
    "130" : "BMW",
    "095" : "Barkas",
    "107" : "Bentley",
    "145" : "Brilliance",
    "141" : "Buick",
    "150" : "Cadillac",
    "157" : "Caterham",
    "160" : "Chevrolet",
    "170" : "Chrysler"
  }
}
private void parseJson(JSONObject数据){
如果(数据!=null){
迭代器it=data.keys();
while(it.hasNext()){
String key=it.next();
试一试{
if(data.get(key)instanceof JSONArray){
JSONArray arry=data.getJSONArray(key);
int size=arry.length();
对于(int i=0;i
首先使用以下代码:

private void parseJson(JSONObject data) {

        if (data != null) {
            Iterator<String> it = data.keys();
            while (it.hasNext()) {
                String key = it.next();
                try {
                    if (data.get(key) instanceof JSONArray) {
                        JSONArray arry = data.getJSONArray(key);
                        int size = arry.length();
                        for (int i = 0; i < size; i++) {
                            parseJson(arry.getJSONObject(i));
                        }
                    } else if (data.get(key) instanceof JSONObject) {
                        parseJson(data.getJSONObject(key));
                    } else {
                        System.out.println(key + ":" + data.getString(key));
                    }
                } catch (Throwable e) {
                    try {
                        System.out.println(key + ":" + data.getString(key));
                    } catch (Exception ee) {
                    }
                    e.printStackTrace();

                }
            }
        }
    }
第二个使用链接如下:


解决方案:

请按照以下步骤操作

首先,创建一个模型类:

YourPojo obj = new Gson().fromJson(json, YourPojo.class);
//YourPojo is the class you want json to convert to it.
//json is in String format and should be valid(use online validators like jsonlint.com)
然后,在改装中进行以下更改:

private Converter.Factory createGsonConverter() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(MyResponse.class, new RedirectionInfoDeserializer());
    Gson gson = gsonBuilder.create();
    return GsonConverterFactory.create(gson);   
}
就这样


试试看,让我知道它是否有效。

JSON有点动态。我不认为它是重复的你的json不是有效的格式,检查这里刚刚更新了正确的json
我得到了一个类似上面的响应,我想把它解析为json
,这是一个json。你到底想达到什么目的?你是在问如何在android中解析数据吗ઽ૯ท 我现在明白了吗?他要求使用
GSON
而不仅仅是使用
JSON
dataObject.getString(“020”);是动态值,可以更改吗@Abdulaleem是的,我正在使用改装2
class RedirectionInfoDeserializer implements JsonDeserializer<MyResponse> {

    private static final String KEY_PAGE = "page";
    private static final String KEY_PAGESIZE = "pageSize";
    private static final String KEY_TOTALPAGECOUNT = "totalPageCount";
    private static final String KEY_DATA = "data";

    @Override
    public MyResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        final JsonObject jsonObject = json.getAsJsonObject();

        // Read simple String values.
        final String page = jsonObject.get(KEY_PAGE).getAsInt();
        final String pageSize = jsonObject.get(KEY_PAGESIZE).getAsInt();
        final String pageCount = jsonObject.get(KEY_TOTALPAGECOUNT).getAsInt();

        // Read the dynamic parameters object.
        final Map<String, String> data = readParametersMap(jsonObject);

        RedirectionInfo result = new RedirectionInfo();
        result.setUri(uri);
        result.setHttpMethod(httpMethod);
        result.setParameters(parameters);
        return result;
    }

    @Nullable
    private Map<String, String> readParametersMap(@NonNull final JsonObject jsonObject) {
        final JsonElement paramsElement = jsonObject.get(KEY_DATA);
        if (paramsElement == null) {
            // value not present at all, just return null
            return null;
        }

        final JsonObject parametersObject = paramsElement.getAsJsonObject();
        final Map<String, String> parameters = new HashMap<>();
        for (Map.Entry<String, JsonElement> entry : parametersObject.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue().getAsString();
            data.put(key, value);
        }
        return data;
    }
}
private Converter.Factory createGsonConverter() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(MyResponse.class, new RedirectionInfoDeserializer());
    Gson gson = gsonBuilder.create();
    return GsonConverterFactory.create(gson);   
}
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://myserver.com")
    .addConverterFactory(createGsonConverter())
    .build();