背景                                                                  

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数据的更多相关文章

  1. java android使用Gson解析泛型json数据

    那就直接开始吧. 在我们获取服务器返回的json数据有时候会出现这种情况,比如: {"body":{"attrName":"feed",&q ...

  2. Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据

    版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...

  3. 解析天气预报JSON数据

    解析天气预报JSON数据 JSON字符串 constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'"status" ...

  4. mormot解析天气预报JSON数据

    mormot解析天气预报JSON数据 uses SynCommons; constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'&qu ...

  5. 模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

    需要用到的lib包 :解析json  gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三 ...

  6. 解析网络json数据,模拟美团界面显示。

    <?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android=&q ...

  7. Android解析服务器Json数据实例

    Json数据信息如下: { "movies": [ { "movie": "Avengers", "year": 201 ...

  8. C# JToken类的使用,实现解析动态json数据、遍历、查找

    在原来解析json数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json数据,这种方法就不使用. 为了解决动态解析js ...

  9. Unity3d-XML文件数据解析&amp;JSON数据解析

    1.XML文件数据解析:(首先须要导入XMLParser解析器,The latest released download from:http://dev.grumpyferret.com/unity/ ...

随机推荐

  1. 【转】让你10分钟搞定Mac--最简单快速的虚拟安装

    文章出处:让你10分钟搞定Mac--最简单快速的虚拟安装http://bbs.itheima.com/thread-106643-1-1.html (出处: 黑马程序员训练营论坛) 首先说明一下. 第 ...

  2. [ 原创 ] Java基础8--什么叫做重载

    重载是在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关,B中的参数列表和题目的方法完全一样了.

  3. 【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 ...

  4. [HDU5343]MZL's Circle Zhou

    题目大意: 给你两个字符串a和b,从中分别取出子串x和y,求不同的x+y的个数. 思路: 对于每一个字符串,构建SAM. 为了保证相同的x+y不会被重复统计,我们可以想办法只统计相同的x+y中x最长的 ...

  5. 【BZOJ】2730: [HNOI2012]矿场搭建【Tarjan找割点】【分联通块割点个数】

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3230  Solved: 1540[Submit][Stat ...

  6. Trie树之C-实现

    title: Trie树之C++实现 comments: true date: 2016-10-02 16:59:54 categories: 算法 tags: Trie树 前言 之前写了一篇偏向于理 ...

  7. Android peferenceActivity 自己定义标题简单方法

    Android peferenceActivity 自己定义标题简单方法 peferenceActivity 全然使用定义好的布局. 因此不能简单象其他好窗体进行自定,如今我们须要加 一个自己定义标题 ...

  8. 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 ...

  9. C/C++ 函数指针 总结

    什么是函数指针 就像某一变量的地址可以存储在相应的指针变量中一样,指向函数的指针中保存着函数代码起始处的地址 函数指针的声明 当声明一个函数指针时,必须声明它指向的函数类型.要指定函数类型,就要指出函 ...

  10. VS2010发布网站