Gson解析复杂Json数据
背景
json是一种数据格式,便于数据传输、存储、交换。
gson是一种组件库,可以把java对象数据转换成json数据格式。
推荐一个Json判别对错的网站:http://jsonlint.com/
因为我在写程序的时候碰到了我自己写的json有错,然后我还不以为然,知道一直报错死活不成功才去网上搜网站查json的正确格式。
我写的是android的程序,用到的是Gson包,开头用的1.6的包,老是报错,换成最新的2.2.4就没有错了。
最新下载地址:https://code.google.com/p/google-gson/downloads/list
代码
我要解析的Json数据为:
private String jsonData = "[{\"name\":\"Michael\",\"age\":20,\"address\":{\"Long_name\":\"4long\",\"short_name\":\"4short\"}},{\"name\":\"Mike\",\"age\":21,\"address\":{\"Long_name\":\"1long\",\"short_name\":\"1short\"}}]";
即:
[
{
"name": "Michael",
"age": 20,
"address": {
"Long_name": "4long",
"short_name": "4short"
}
},
{
"name": "Mike",
"age": 21,
"address": {
"Long_name": "1long",
"short_name": "1short"
}
}
]
array.java
package com.yuyidong.json;
import java.io.StringReader;
import android.util.JsonReader;
public class array {
public array() {
// TODO 自动生成的构造函数存根
}
public void parseJson(String jsonData)
{
JsonReader reader = new JsonReader(new StringReader(jsonData));
try
{
reader.beginArray();
while(reader.hasNext())
{
reader.beginObject();
//Session session = new Session();
while(reader.hasNext())
{
String tagName = reader.nextName();
if(tagName.equals("name"))
{
System.out.println("name--->" + reader.nextString());
}
else if(tagName.equals("age"))
{
System.out.println("age--->" + reader.nextInt());
}
else if(tagName.equals("address"))
{
reader.beginObject();
while(reader.hasNext())
{
String tagName2 = reader.nextName();
if (tagName2.equals("Long_name"))
{
System.out.println("long_name--->" + reader.nextString());
}
else if (tagName2.equals("short_name"))
{
System.out.println("short_name--->" + reader.nextString());
}
}
reader.endObject();
}
}
reader.endObject();
}
reader.endArray();
}
catch (Exception e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("BAD");
}
finally
{
try {
reader.close();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
在主文件调用,建立一个Button的监听器,在监听器中完成。
array array_json = new array();
array_json.parseJson(jsonData);
成功了。
问题
我尝试了一下另外的方法,没有成功,大神们帮我看看呀。也是同样的Json。
address.java
package com.yuyidong.json;
public class address {
private String Long_name;
private String short_name;
public String getlong_name()
{
return Long_name;
}
public void setlong_name(String Long_name)
{
this.Long_name = Long_name;
}
public String getshort_name()
{
return short_name;
}
public void setshort_name(String short_name)
{
this.short_name = short_name;
}
@Override
public String toString() {
// TODO 自动生成的方法存根
return "Long_name--->"+getlong_name()+"\nshort_name--->"+getshort_name();
}
}
JsonUtils.java
package com.yuyidong.json;
import java.util.List;
public class JsonUtils {
private String name;
private int age;
private List<address> address;
public String getname() {
return name;
}
public void setname(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<address> getaddress() {
return address;
}
public void setaddress(List<address> address) {
this.address = address;
}
@Override
public String toString() {
// TODO 自动生成的方法存根
return "name--->"+getname()+"\n age--->"+getAge()+"\n address--->"+getaddress();
}
}
在主文件调用,建立一个Button的监听器,在监听器中完成。
//Type type = new TypeToken<List<JsonUtils>>(){}.getType();
//Gson gson = new Gson();
//List<JsonUtils> jsonutils = gson.fromJson(jsonData, type);
//System.out.println(jsonutils.toString());
Gson gson = new Gson();
JsonUtils jsonUtils = gson.fromJson(jsonData, JsonUtils.class);
System.out.println(jsonUtils);
尝试了两种调用,但是都报错了。

我附上源代码,求大神赐教。
http://pan.baidu.com/s/1o65BB6a
小弟在此谢过了。
转载请注明出处:http://www.cnblogs.com/yydcdut/p/3688217.html
Gson解析复杂Json数据的更多相关文章
- java android使用Gson解析泛型json数据
那就直接开始吧. 在我们获取服务器返回的json数据有时候会出现这种情况,比如: {"body":{"attrName":"feed",&q ...
- Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据
版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...
- 解析天气预报JSON数据
解析天气预报JSON数据 JSON字符串 constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'"status" ...
- mormot解析天气预报JSON数据
mormot解析天气预报JSON数据 uses SynCommons; constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'&qu ...
- 模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。
需要用到的lib包 :解析json gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三 ...
- 解析网络json数据,模拟美团界面显示。
<?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android=&q ...
- Android解析服务器Json数据实例
Json数据信息如下: { "movies": [ { "movie": "Avengers", "year": 201 ...
- C# JToken类的使用,实现解析动态json数据、遍历、查找
在原来解析json数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json数据,这种方法就不使用. 为了解决动态解析js ...
- Unity3d-XML文件数据解析&JSON数据解析
1.XML文件数据解析:(首先须要导入XMLParser解析器,The latest released download from:http://dev.grumpyferret.com/unity/ ...
随机推荐
- 【转】让你10分钟搞定Mac--最简单快速的虚拟安装
文章出处:让你10分钟搞定Mac--最简单快速的虚拟安装http://bbs.itheima.com/thread-106643-1-1.html (出处: 黑马程序员训练营论坛) 首先说明一下. 第 ...
- [ 原创 ] Java基础8--什么叫做重载
重载是在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关,B中的参数列表和题目的方法完全一样了.
- 【CF 585E】 E. Present for Vitalik the Philatelist
E. Present for Vitalik the Philatelist time limit per test 5 seconds memory limit per test 256 megab ...
- [HDU5343]MZL's Circle Zhou
题目大意: 给你两个字符串a和b,从中分别取出子串x和y,求不同的x+y的个数. 思路: 对于每一个字符串,构建SAM. 为了保证相同的x+y不会被重复统计,我们可以想办法只统计相同的x+y中x最长的 ...
- 【BZOJ】2730: [HNOI2012]矿场搭建【Tarjan找割点】【分联通块割点个数】
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3230 Solved: 1540[Submit][Stat ...
- Trie树之C-实现
title: Trie树之C++实现 comments: true date: 2016-10-02 16:59:54 categories: 算法 tags: Trie树 前言 之前写了一篇偏向于理 ...
- Android peferenceActivity 自己定义标题简单方法
Android peferenceActivity 自己定义标题简单方法 peferenceActivity 全然使用定义好的布局. 因此不能简单象其他好窗体进行自定,如今我们须要加 一个自己定义标题 ...
- FolderSync :The various features and how to use them
Help - Tacit Dynamics Help This page describes the various features of FolderSync and how to use the ...
- C/C++ 函数指针 总结
什么是函数指针 就像某一变量的地址可以存储在相应的指针变量中一样,指向函数的指针中保存着函数代码起始处的地址 函数指针的声明 当声明一个函数指针时,必须声明它指向的函数类型.要指定函数类型,就要指出函 ...
- VS2010发布网站
