博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gson解析复杂Json数据
阅读量:6894 次
发布时间:2019-06-27

本文共 4754 字,大约阅读时间需要 15 分钟。

背景                                                                  

json是一种数据格式,便于数据传输、存储、交换。

gson是一种组件库,可以把java对象数据转换成json数据格式。

推荐一个Json判别对错的网站:

因为我在写程序的时候碰到了我自己写的json有错,然后我还不以为然,知道一直报错死活不成功才去网上搜网站查json的正确格式。

我写的是android的程序,用到的是Gson包,开头用的1.6的包,老是报错,换成最新的2.2.4就没有错了。

最新下载地址:

代码                                                                   

我要解析的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; 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
getaddress() { return address; } public void setaddress(List
address) { this.address = address; } @Override public String toString() { // TODO 自动生成的方法存根 return "name--->"+getname()+"\n age--->"+getAge()+"\n address--->"+getaddress(); }}
在主文件调用,建立一个Button的监听器,在监听器中完成。
//Type type = new TypeToken
>(){}.getType(); //Gson gson = new Gson();//List
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://www.cnblogs.com/yydcdut/p/3688217.html,如需转载请自行联系原作者
你可能感兴趣的文章
这款创意相机,能让盲人更真实的感触身边世界
查看>>
hdu 1285 确定比赛名次(很典型的拓扑排序)
查看>>
学习iOS【3】数组、词典和集合
查看>>
8Python全栈之路系列之Django Cookie 与Sessi
查看>>
nginx反向代理配置
查看>>
DecimalFormat用法
查看>>
一致性哈希算法及其在分布式系统中的应用
查看>>
流程DEMO-出差申请单
查看>>
阿里巴巴与清华大学成立联合实验室,十问十答看人机交互未来时间表
查看>>
mybatis-添加操作
查看>>
黑莓与AR眼镜生产商Vuzix联手,为其提供数据安全服务
查看>>
中小企业Zabbix监控生产案例实践
查看>>
uC/OS-II源码分析(三)
查看>>
mysql Connector C++ 操作数据库 vs2012
查看>>
递归再一次让哥震惊了
查看>>
3星|《财经》2018年第4期:海外专栏作家对2018全球经济形势的判断
查看>>
jquery :eq选择器和eq()方法的用法与比较
查看>>
[转载]理解 I/O Completion Port (IOCP完成端口)
查看>>
sublime安装package control及常用插件
查看>>
11、系统初始化流程、拯救模式 学习笔记
查看>>