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);
image
成功了。
 

问题

我尝试了一下另外的方法,没有成功,大神们帮我看看呀。也是同样的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,如需转载请自行联系原作者
相关文章
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
367 67
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
947 4
JSON数据解析实战:从嵌套结构到结构化表格
|
存储 搜索推荐 大数据
数据大爆炸:解析大数据的起源及其对未来的启示
数据大爆炸:解析大数据的起源及其对未来的启示
985 15
数据大爆炸:解析大数据的起源及其对未来的启示
|
JSON 监控 网络协议
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
2750 9
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
数据采集 监控 搜索推荐
深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
淘宝商品详情API接口,是淘宝开放平台为第三方开发者提供的一套用于获取淘宝、天猫等电商平台商品详细信息的应用程序接口。该接口涵盖了商品的基本信息(如标题、价格、图片)、属性参数、库存状况、销量评价、物流信息等,是电商企业实现商品管理、市场分析、营销策略制定等功能的得力助手。
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
1041 4
|
数据采集 前端开发 API
SurfGen爬虫:解析HTML与提取关键数据
SurfGen爬虫:解析HTML与提取关键数据
|
JSON 小程序 UED
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
2725 12
|
搜索推荐 API 开发者
深度解析:利用商品详情 API 接口实现数据获取与应用
在电商蓬勃发展的今天,数据成为驱动业务增长的核心。商品详情API接口作为连接海量商品数据的桥梁,帮助运营者、商家和开发者获取精准的商品信息(如价格、描述、图片、评价等),优化策略、提升用户体验。通过理解API概念、工作原理及不同平台特点,掌握获取权限、构建请求、处理响应和错误的方法,可以将数据应用于商品展示、数据分析、竞品分析和个性化推荐等场景,助力电商创新与发展。未来,随着技术进步,API接口将与人工智能、大数据深度融合,带来更多变革。
639 3

热门文章

最新文章

推荐镜像

更多
  • DNS