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/ ...
随机推荐
- poj1273(Edmonds-Karp)
这道题可以算是例题了. 求解最大流,采用EK算法,用广搜查找增广路径,找到后更新网络流矩阵,循环执行直至找不到增广路径为止.这里要小心的是重复边的情况. 程序也是参照了网上的模版来写的,有一些技巧.如 ...
- 下拉框搜索插件chosen
{% load staticfiles %} <!DOCTYPE html> <html lang="en"> <head> <meta ...
- PHP5.3以上版本使用pthreads PHP扩展真正支持多线程
class test_thread_run extends Thread{public $url;public $data; public function __construct($url){$th ...
- zoj 3229 上下界网络最大可行流带输出方案
收获: 1. 上下界网络流求最大流步骤: 1) 建出无环无汇的网络,并看是否存在可行流 2) 如果存在,那么以原来的源汇跑一次最大流 3) 流量下界加上当前网络每条边的流量就是最大可行流了. 2. 输 ...
- gearman学习笔记
<?php 搭建描述: . 在实际使用时应该是运行gearmand -d 的 server 一台. [要装gearmand,运行gearmand] . 处理worker的机器若干[要装gearm ...
- PYQT设计无边框窗体
#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try: _fromUt ...
- [Asp.net MVC]Bundle合并,压缩js、css文件
摘要 在web优化中有一种手段,压缩js,css文件,减少文件大小,合并js,css文件减少请求次数.asp.net mvc中为我们提供一种使用c#代码压缩合并js和css这类静态文件的方法. 一个例 ...
- android应用名称设置的问题
<application android:label="@string/app_name1" <activity and ...
- Android网络通信Volley框架源代码浅析(二)
尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列: ...
- AFNetworking 2.0使用(持续更新)
本人视频教程系列 导入AFNetworking 2.0 文件夹,引入头文件AFNetworking.h --------------- *使用NSURLSessionDownloadTask来下载一张 ...