使用Gson的Android Json反序列化在内部“数据”标签上失败

问题描述

|| 我正在使用Android中的Gson库来解析JSON。 ResponseList .java
package com.hussain.classes;

import java.util.Date;
import java.util.List;

@SuppressWarnings(\"unused\")
public class ResponseList {

private List<ResponseTag> server_list;

    public List<ResponseTag> getResponse() {
        return server_list;
    }

    public void setTrends(List<ResponseTag> response) {
        this.server_list = response;
    }
}
ResponseTag .java
package com.hussain.classes;

public class ResponseTag {
    private String ServUser;
    private String ServURL;
    private String CustID;

    public String getName() {
        return ServUser;
    }

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

    public String getUrl() {
        return ServURL;
    }

    public void setUrl(String ServURL) {
        this.ServURL = ServURL;
    }

    public String getCustID() {
        return CustID;
    }

    public void setCustID(String CustID) {
       this.CustID = CustID;
    }
}
Main.java
package com.hussain.gjson;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URI;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import com.google.gson.Gson;
import com.hussain.classes.ResponseList;
import com.hussain.classes.ResponseTag;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try{
            Log.i(\"MY INFO\",\"Json Parser started..\");                    
            Gson gson = new Gson();

            // Reader r = new InputStreamReader(getJSONData(\"http://search.twitter.com/trends.json\"));

            Reader r = new InputStreamReader(getJSONData(\"http://xxxx.com\"));

            Log.i(\"MY INFO\",r.toString());
            ResponseList objs = gson.fromJson(r,ResponseList.class);
            Log.i(\"MY INFO\",\"\"+objs.getResponse().size());

            for(ResponseTag tr : objs.getResponse()){
                Log.i(\"Response\",tr.getName() + \" - \" + tr.getUrl()+ \"-\"+ tr.getCustID());         
            }            
        }catch(Exception ex){
            ex.printstacktrace();
        }
    }


    public InputStream getJSONData(String url){
        DefaultHttpClient httpClient = new DefaultHttpClient();
        URI uri;
        InputStream data = null;
        try {
            uri = new URI(url);
            HttpGet method = new HttpGet(uri);
            HttpResponse response = httpClient.execute(method);
            data = response.getEntity().getContent();
        } catch (Exception e) {
            e.printstacktrace();
        }

        return data;
    }
}    
这三个java类在我的项目中使用。它可以完美工作并返回JSON响应,如下所示:   {\“ server_list \”:[{\“ CustID \”:\“ 23 \”,\“ ServUser \”:\“ Nathan \”,\“ ServPass \”:\“ coffee00 \”,\“ CustServersID \” :\“ 157 \”,\“ ServURL \”:\“ exp.lcgpence.com \”},]}} 但是,当我尝试使用其他URL进行相同操作时,它将无法正常工作。 在关注了来自两个不同URL的两个JSON响应之后,我发现一个独特的区别是:   {\“ sessionId \”:\“ 000ASXeEL3381100000000LCG0 \”,\“ responseCode \”:1,\“数据\”:[{\“ job_number \”:\“ 09-028 \”,\“ contract_date \”:{ },\“ project_title \”:\“代顿学区Precon \”,\“ project_manager \”:\“ Shaun Stuhldryer \”,\“ created_date \”:\“ 2009-06-11T13:22:08.000000580 \”, \“ project_name \”:\“ 09028 \”},{\“ job_number \”:\“ 09-053 \”,\“ contract_date \”:{},\“ project_title \”:\“ South Salem高中2010 Renov。\“,\” project_manager \“:\” Lee Zumwalt \“,\” created_date \“:\” 2009-11-30T14:38:43.000000573 \“,\” project_name \“:\” 09053 \“} ,{\“ job_number \”:\“ 09-011 \”,\“ contract_date \”:{},\“ project_title \”:\“ OFP新混凝土楼板-海湾4 \”,\“ project_manager \”:\ “ Jeff Perrin \”,\“ created_date \”:\“ 2009-01-19T11:12:56.000000113 \”,\“ project_name \”:\“ 09011 \”},{\“ job_number \”:\“ 08- 020 \“,\” contract_date \“:{},\” project_title \“:\” Clackamas Freezer Repair \“,\” project_manager \“:\” Paul Schulz \“,\” created_date \“:\” 2008- 04-02T11:43:40.000000050 \“, \“ project_name \”:\“ 08020 \”},{\“ job_number \”:\“ 07-018 \”,\“ contract_date \”:{},\“ project_title \”:\“ Shop Tenant Improvements LL Work \“,\” project_manager \“:\” Jason Terry \“,\” created_date \“:\” 2007-02-22T17:33:07.000000920 \“,\” project_name \“:\” 07018 \“}}] 唯一的区别是,在第二个JSON响应中,我必须使用\“ data \”并解析内部值。 在其中,第一个\“ server_list \”是唯一的标签。 如何反序列化内部\“ data \”标签?     

解决方法

        一个简单的解决方案是创建另一个类:
public class Whatever {
    private String sessionId;
    private String responseCode;
    private List<ResponseTag> data;
    ...
}
如果反序列化第一次失败,请使用新类再次尝试。