在线等!关于Gson解析出错以及如何取List中值的问题

起因是在解析一个json string 的时候,碰到了2层,第一层是2个string 类型的字段,然后是List的格式的json string。
我定义为List t,解析失败了,调试的时候显示为null,然而把List换成 object以后解析成功了,调试栏显示为
ArrayList。。。请问是问什么?还有如果解析出来,要怎么写代码取得List中的某个字段的值?

你定义 List t = new ArrayList() 试试

贴下代码

public class Json {
private String content_type;
private int total;
private Object rows;

    public void setContent_type(String content_type) {
         this.content_type = content_type;
     }
     public String getContent_type() {
         return content_type;
     }

    public void setTotal(int total) {
         this.total = total;
     }
     public int getTotal() {
         return total;
     }

     public void setRows(Object rows) {
         this.rows = rows;
     }
     public Object getRows() {
         return rows;
     }

}

private Object rows; 这里之前定义的是 List,但是使用Gson解析发现值都是Null,后来换成Object以后就能解析成功了

tojson的时候 根本不是 你想要的 样子 建议打印出 json 自己看

就像楼上说的,在后台先打印json字符串看看,现在网上很多在线解析的,百度键入json视图随便找一个,把你后台打印的字符串贴到里面就可以印证正确与否

json格式已经在网上解析过了,格式是没有问题的。

大神们帮帮忙啊!!!2129544784 我的QQ。希望不吝赐教!

String jsonResult = HttpGetSrc.requestJson(httpUrl, httpArg);
// System.out.println(jsonResult);
Gson gson=new Gson();
JsonRootBean rs=gson.fromJson(jsonResult, JsonRootBean.class);
System.out.println(rs.toString());
List ret=rs.getResult();
//完成数据封装,你可以遍历list获得result对象,就可以访问你获得的数据
//JsonRootBean,Result.这2个类,可以去www.bejson.comn在线解析网站,自动生成,当然你可以根据你的json内容自动手写。
/**

  • Auto-generated: 2017-03-17 15:37:13 *
  • @author bejson.com (i@bejson.com)
  • @website http://www.bejson.com/java2pojo/
    */
    public class Result {

    private String id;
    private String question;
    private String answer;
    private String item1;
    private String item2;
    private String item3;
    private String item4;
    private String explains;
    private String url;
    public void setId(String id) {
    this.id = id;
    }
    public String getId() {
    return id;
    }

    public void setQuestion(String question) {
    this.question = question;
    }
    public String getQuestion() {
    return question;
    }

    public void setAnswer(String answer) {
    this.answer = answer;
    }
    public String getAnswer() {
    return answer;
    }

    public void setItem1(String item1) {
    this.item1 = item1;
    }
    public String getItem1() {
    return item1;
    }

    public void setItem2(String item2) {
    this.item2 = item2;
    }
    public String getItem2() {
    return item2;
    }

    public void setItem3(String item3) {
    this.item3 = item3;
    }
    public String getItem3() {
    return item3;
    }

    public void setItem4(String item4) {
    this.item4 = item4;
    }
    public String getItem4() {
    return item4;
    }

    public void setExplains(String explains) {
    this.explains = explains;
    }
    public String getExplains() {
    return explains;
    }

    public void setUrl(String url) {
    this.url = url;
    }
    public String getUrl() {
    return url;
    }
    @Override
    public String toString() {
    return "Result [id=" + id + ", question=" + question + ", answer=" + answer + ", item1=" + item1 + ", item2="
    + item2 + ", item3=" + item3 + ", item4=" + item4 + ", explains=" + explains + ", url=" + url + "]";
    }

}
//=======================
/**

  • Auto-generated: 2017-03-17 15:37:13 *
  • @author bejson.com (i@bejson.com)
  • @website http://www.bejson.com/java2pojo/
    */
    public class JsonRootBean {

    private List result;
    // @JsonProperty("error_code")
    private int errorCode;
    private String reason;
    public void setResult(List result) {
    this.result = result;
    }
    public List getResult() {
    return result;
    }

    public void setErrorCode(int errorCode) {
    this.errorCode = errorCode;
    }
    public int getErrorCode() {
    return errorCode;
    }

    public void setReason(String reason) {
    this.reason = reason;
    }
    public String getReason() {
    return reason;
    }
    @Override
    public String toString() {
    return "JsonRootBean [result=" + result + ", errorCode=" + errorCode + ", reason=" + reason + "]";
    }

}

在请教一下,如这种格式的json string {"result":"success","total":"105",rows{["date":"...","name":"john","age":"16"],["date":"...","name":"Alex","age":"41"],["date":"...","name":"kevin","age":"32"]...}
用gson.fromjson(jsonstr,Root.class)解析,可以解析出result和total,rows被解析成list,那请问这个list还需要用
fromjson(jsonstr,new TypeToken()>{}.getType())这样来解析吗?

我现在按gson.fromjson(jsonstr,Root.class)解析后获取List.get().getname()报错gson.fromjson(jsonstr,Root.class)解析

上面报错的信息打错了,是显示com.google.gson.internal.LinkedTreeMap cannot be cast to Rows

好像发现问题在哪了,我的json string 里有个字段“geo”,大部分的数据中他都是这样的: "geo":""。然而在极个别的数据中他是这样的
"geo":{"longitude":-121.7464929,"altitude":0,"latitude":36.9123101},然后在定义的时候把它定义成了String,所以解析的时候会提示Expected BEGIN_Object but was STRING 。求教这种情况应该怎么处理。!!!!

1,jsonst:是你要解析的 json格式的字符串, {"result":"success","total":"105",rows{["date":"...","name":"john","age":"16"],["date":"...","name":"Alex","age":"41"],["date":"...","name":"kevin","age":"32"]...}。
2,Root rs=gson.fromjson(jsonstr,Root.class),返回的实体类对象是包含了"result":"success","total":"105",rows{["date":"...","name":"john"。中对应的属性 :result ,total,rows在内的结果集。
3,List rowsdata=rs.getResult(); 这里rowdata是个列表,里边封装了["date":"...","name":"john","age":"16"],对应的类,这个类的属性:date,name,age。假如你把这个数据类定义为:Dog
4,要获得name字段。可以foreach遍历list如:
for(Dog dg:rowdata){
dg.getname();
}