在执行解析数据之前,需要将一个类库应用到你的程序中,下载的地址是:
http:
下载解压之后你需要将蓝色标记的文件放入到你的程序之中应用
首先,我们需要知道什么是Json数据:
JSON的定义:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。
– Json.org
说到这里,可能会发现Json数据与XML文件很相似,下面,我们看下它们之间的对比:
1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
下面,我们看下Android官方文档给出的一个Json的例子:
[
{
"id": 912345678901,
"text": "How do I read JSON on Android?",
"geo": null,
"user": {
"name": "android_newb",
"followers_count": 41
},
{
"id": 912345678902,
"text": "@android_newb just use
android.util.JsonReader!",
"geo": [50.454722, -104.606667],
"user": {
"name": "jesse",
"followers_count": 2
}
}
]}
这是一个Json数组,里面有两个对象,我们需要对其进行解析,下面的链接是官方文档对其解析的例子:
点击打开链接
下面,以一个具体的例子对其进行说明:
在这个例子中介绍三种解析Json的方法,其中第二和第三类是利用类对象和Json数据的互相转换完成的解析。
下面是实现的截图:
第一个按钮的作用是利用Google提供的Api解析Json数据,这里给出的是一个数组,具体的实现代码如下:
public class JsonUtils {
public void parseJson(String jsonData) {
try {
//创建JsonReader 对象
JsonReader reader = new JsonReader(new StringReader(jsonData));
//开始解析数组
reader.beginArray();
//循环判断有没有下一个Json对象
while(reader.hasNext()){
//开始解析Json对象
reader.beginObject();
//循环判断Json对象里面有没有下一个键值对
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("name")){
//name键多对应的值
Log.d("BruceZhang", "name: "+reader.nextString());
}else if(tagName.equals("age")){
//age键多对应的值
Log.d("BruceZhang", "age: "+reader.nextString());
}
}
//Json对象的结尾
reader.endObject();
}
//数组解析的结尾
reader.endArray();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
在主程序的调用如下:
private void jsonArray(String jsonData) {
JsonUtils jsonUtils=new JsonUtils();
jsonUtils.parseJson(jsonData);
}
第二个按钮是利用类对象向Json数据的转换进行的解析,下面是实现的代码:
public class JsonUtils2 {
public void parseUserFromJson(String jsonData){
Gson gson=new Gson();
//把Json对象转换成User对象
User user=gson.fromJson(jsonData, User.class);
Log.d("BruceZhang", "name:"+user.getName());
Log.d("BruceZhang", "name:"+user.getAge());
}
}
在主程序的调用如下:
private void userJson(String jsonData){
JsonUtils2 jsonUtils=new JsonUtils2();
jsonUtils.parseUserFromJson(jsonData);
}
第三个按钮同第二个按钮的原理是一样的,不过这里解析的Json数组,代码如下:
public class JsonUtils3 {
public void parseUserFromJson(String jsonData){
// Type listType=(Type) new TypeToken<LinkedList<User>>(){}.getType();
// Gson gson=new Gson();
// LinkedList<User> users=gson.fromJson(jsonData, (java.lang.reflect.Type) listType);
// for(Iterator<User> iterator=users.iterator();iterator.hasNext();){
// User user=(User)iterator.next();
// Log.d("BruceZhang", "name: "+user.getName());
// Log.d("BruceZhang", "name: "+user.getAge());
// }
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
//LinkList是双向链表
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator<User> iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
// System.out.println(user.getName());
// System.out.println(user.getAge());
Log.d("BruceZhang", "name: "+user.getName());
Log.d("BruceZhang", "name: "+user.getAge());
}
}
}
在主程序的调用如下:
private void userJsonArray(String jsonData){
JsonUtils3 jsonUtils=new JsonUtils3();
jsonUtils.parseUserFromJson(jsonData);
}
下面给出主程序的完整代码:
public class MainActivity extends Activity {
/*
* 1.开始解析数组
* 2.开始解析对象
* 3.解析键值对(多个)
* 4.解析对象结束
* 5.开始解析对象
* 6.解析键值对
* 7.解析对象结束
* 8.解析数组结束
*/
private String jsonData="[{\"name\":\"BruceZhang\",\"age\":20},{\"name\":\"ZhangHu\",\"age\":23}]";
private String jsonData2="{\"name\":\"BruceZhang\",\"age\":20}";
private Button button;
private Button button2;
private Button button3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new MyButton());
button2=(Button)findViewById(R.id.button2);
button2.setOnClickListener(new MyButton());
button3=(Button)findViewById(R.id.button3);
button3.setOnClickListener(new MyButton());
}
class MyButton implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button:
jsonArray(jsonData);
break;
case R.id.button2:
userJson(jsonData2);
break;
case R.id.button3:
userJsonArray(jsonData);
break;
default:
break;
}
}
}
private void jsonArray(String jsonData) {
JsonUtils jsonUtils=new JsonUtils();
jsonUtils.parseJson(jsonData);
}
private void userJson(String jsonData){
JsonUtils2 jsonUtils=new JsonUtils2();
jsonUtils.parseUserFromJson(jsonData);
}
private void userJsonArray(String jsonData){
JsonUtils3 jsonUtils=new JsonUtils3();
jsonUtils.parseUserFromJson(jsonData);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
分享到:
相关推荐
Android开发-Json数据的生成与解析-完整Demo-AndroidStuidio http://blog.csdn.net/iwanghang Android开发-Json(一)Json数据的生成-完整Demo-AndroidStuidio Android开发-Json(二)Json数据的解析-完整Demo-Android...
eclipse项目。获取raw文件下的json文件。无需编写json数据里面key值的实体类,动态获取里面的键值对的值。并在列表显示
老罗Android视频开发教程 android解析Json数据代码 很不错的Android开发教程。
Android开发之原生解析复杂的json数据
Android-06-解析JSON数据(4集) Android-07-服务器端JDBC编程(2集) Android-08-服务器端Web编程(6集) Android-09-常用UI控件(33集) Android-11-对话框介绍(4集) Android-12-通知的使用(2集) Android-13-...
Android端解析web端传来的json数据
XML与Json数据解析、JDBC与Web编程、常用UI控件、 数据储存与文件操作、对话框、通知、菜单、 LoaderManager异步加载、多线程(AsyncTask与Handler)、 百度地图等十五个模块,一共102集。 本网盘分享章节编号是...
Android网络开发中如何使用JSON进行网络通信---Android_JSON数据通讯方法解析
【Android 开发】: Android客户端与服务端之间使用GSON交互数据。 http://blog.csdn.net/ahuier/article/details/16871741
【Android 开发】: Android客户端与服务端之间使用JSON交互数据。 http://blog.csdn.net/ahuier/article/details/15493603 客户端代码
一个用eclipse开发的android解析json数据的例子
本文主要讲解,通过HttpURLConnection从服务端获取数据,然后经过JSON解析后,显示在手机屏幕上。
一款含有有丰富Android开发文章的App,内容每天都会更新。 原网站 http://www.wanandroid.com ,数据内容源至hongyang大神的网址,我只是将网址转化为App方便大家学习,侵删。 接口地址: ...
开发中遇到的复杂JSON,用TypeToken来进行处理:(当然还有第二种解析方式,请查看http://blog.csdn.net/jason_996/article/details/78039799) 处理方法: 1,先将接口返回的JSON,用gson.tojson(map)方法,将...
解决当内存资源不充足时大数据量的JSON文本解析为JSON对象会导致内存溢出的问题。 基于org.json的部分源代码,以及新增的JsonLazyer类。 原理:用时创建的规则降低传统解析器一次性将文本转成Java对象而占用大量内存...
本文将主要介绍在Android开发中,如何在服务器端创建JSON数据,以及如何在Android客户端对JSON数据进行解析。 1.JSON数据结构 在JSON中有两种数据结构:对象和数组。 1.1对象 在JSON中,一个对象以“{”...
游戏开发中客户端与服务器端数据的传输, URL url = new URL(path); //创建一个Url对象 //得到打开的链接对象 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求超时与请求...
服务器端采用Struts2编码,Android客户端采用Json解析它的数据 服务器端程序为ServerProject(用MyEclipse建立此项目),Android客户端程序代码为:AndroidHttpJSONActivity 注意Android客户端代码中,有一个ip地址,...
本程序是用Android手机去访问用java开发的服务器的数据,并让服务器 从数据库中访问数据库以JSON格式返回数据,在Android手机端将返回的数据 以JSON的格式解析出来。 本文件中的mysql.sql是我测试是的数据库,在...
用于安卓移动开发解析json数据的jar包,支持转数组转集合