起因是在解析一个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内容自动手写。
/**
@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 + "]";
}
}
//=======================
/**
@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();
}