json多层集合嵌套解析求助(仅限GSON方式解析)

LoadTown 2015-01-21 12:55:24
类似如下格式如何解析求帮助:【使用GSON 方式解析】

[
{
"code": 200,
"response": [
{
"page": 1,
"user": [
{
"name": "张三",
"age": 20,
"sex": "男"
},
{
"name": "李四",
"age": 21,
"sex": "男"
},
{
"name": "王五",
"age": 22,
"sex": "男"
}
]
}
]
}
]
...全文
2640 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoadTown 2015-01-21
  • 打赏
  • 举报
回复
感谢版主耐心解答,昨天我把定义了一个 类 public class CallBackVo{ String code; Object response; ..... get ......set 方法 } 通过 Type listType = new TypeToken<List<CallBackVo>>() {}.getType(); List<CallBackVo>> list = gson.from(jsonstr,listtype); 发现"response 数组中 内部集合 user 被转成了形如 [{name = 张三,age = 20,sex = 男},{name = 李四,age = 21,sex = 男}] 非正确json字符串格式,所以下面再次进行对内部集合解析出现错误。 本来是想在网络请求成功之后统一解析为CallBackVo对象然后回调,现在看来只能把数据返回具体业务再进行解析了。
shixitong 2015-01-21
  • 打赏
  • 举报
回复
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import com.google.gson.Gson;

public class Test {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws NoSuchMethodException 
	 * @throws IllegalArgumentException 
	 * @throws SecurityException 
	 */
	public static void main(String[] args) throws IOException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {


		String str=getJsonStr();
		Gson gson = new Gson();
		ResultMsg[] resultMsgArray=gson.fromJson(str, ResultMsg[].class);
		printlnMsg(resultMsgArray);
	}
	
	
	/**
	 * 获得要转换的JSON字符串<br>
	 * 这边为了方面我直接读的我本地的文件内容为你要转换的json字符串
	 * @return
	 * @throws IOException
	 */
	private static String getJsonStr() throws IOException{
		StringBuffer sbf = new StringBuffer();
		BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream( "F:"+File.separator+"json.txt"),"UTF-8"));
		//json字符串
		String str="";
		while((str=reader.readLine())!=null){
			sbf.append(str);
		}
		reader.close();
		return sbf.toString();
	}
	
	private static void printlnMsg(ResultMsg[] resultMsgArray){
		if(null!=resultMsgArray){
			System.out.println("结果:"+Arrays.toString(resultMsgArray));
		}
	}

}

class ResultMsg{
	private Response[] response;
	private String code;
	
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public Response[] getResponse() {
		return response;
	}
	public void setResponse(Response[] response) {
		this.response = response;
	}
	@Override
	public String toString() {
		return "ResultMsg [response=" + Arrays.toString(response) + ", code="
				+ code + "]";
	}
	
	
}
class Response{
	private String page;
	private User[] user;
	public String getPage() {
		return page;
	}
	public void setPage(String page) {
		this.page = page;
	}
	public User[] getUser() {
		return user;
	}
	public void setUser(User[] user) {
		this.user = user;
	}
	@Override
	public String toString() {
		return "Response [page=" + page + ", user=" + Arrays.toString(user)
				+ "]";
	}
	
	
	
}
class User {
	
	private String name;
	private String age;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	
}

上面这端代码把JSON结果封装成了一个ResultMsg数组的形式,楼主也可以根据自己的需要改装

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧