在执行解析数据之前,需要将一个类库应用到你的程序中,下载的地址是:

http://code.google.com/p/google-gson/

下载解压之后你需要将蓝色标记的文件放入到你的程序之中应用

首先,我们需要知道什么是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 exceptione.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;@Overrideprotected 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{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (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);}@Overridepublic 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数据的解析相关推荐

  1. android json.out,Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

  2. Android开发--使用实体类解析JSON文本

    Android开发–使用实体类解析JSON文本 在Android开发过程中,涉及到了API的调用的时候,会返回特定的数据,两个主流返回的数据格式是JSON形式和XML形式.但是相对于XML,JSON数 ...

  3. Android 实现Json数据解析,并进行应用

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 从网站上 ...

  4. Android中Json数据解析

    Android学习系列(20)--App数据格式之解析Json (很基本基础的入门,对json的基础讲的很好) http://my.eoe.cn/874311/archive/1936.html An ...

  5. Android系列---JSON数据解析

    http://www.cnblogs.com/xiaoluo501395377/p/3446605.html Android系列---JSON数据解析 转载于:https://www.cnblogs. ...

  6. Android基础——JSON数据的全方位解析

    Android基础--JSON数据的全方位解析 本篇文章包括以下内容: JSON是什么 JSONObject的解析和存储 JSONObject的解析和存储(抽象) JSONArray的解析和存储 模拟 ...

  7. Android studio获取服务器端json数据并解析

    最近在做Android的一个项目,涉及到Android studio与服务器端通信问题,在网上看了很多,找到了一些解决办法,这篇文章就简单介绍一下如何获取以及向服务器上传json数据. 在这个项目中, ...

  8. android libbfaac.so,Android中Json数据读取与创建

    一:  Json的特性和在数据交互中的地位就不用说了,直接看案例. 首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项 ...

  9. Flutter 项目编写 第三方插件库文件引入,本地图片 json数据引入解析

    FlutterDemo是如何一步一步搭建起来的 最初就是直接新建flutter项目,就会自动建立一个入门项目.(开始项目前,需先学习Dart语言) flutter项目代码都在lib目录下编写: 新建包 ...

最新文章

  1. 什么是Web Worker?
  2. C++ 实例化对象 p-printX()
  3. 使用Eclipse Deeplearning4j构建简单的神经网络
  4. ssh自动输入密码登录服务器/ssh免输入密码登录/非交互ssh 密码验证
  5. 通过AMS分析Binder流程(Java到Kernel)
  6. 实习、竞赛、论文?关于计算机读研的一些小建议!
  7. mysql基础5-数据的操作
  8. 深度学习caffe:权值初始化
  9. SPSS实现游程检验
  10. 算法快学笔记(一):算法入门
  11. 【Windows 10系统】惠普打印机解决打印机状态已暂停
  12. 免费拥有个人云主机——AWS免费EC2套餐
  13. 获取ua(user Agent)
  14. jquery触发键盘按下事件
  15. 第二篇 编写一个fluter应用
  16. 锎的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. 石油勘探开发知识图谱技术实现思路探讨
  18. js中两个等号“==“与三个等号“===“有何不同
  19. X58老平台华硕P6T SE安装NVME SSD折腾记录和简单教程
  20. python实现水仙花数判断

热门文章

  1. C#String地址、拼接性能学习
  2. docker-compos
  3. Python3入门笔记(1) —— windows安装与运行
  4. Python中range和xrange的区别
  5. Eslint中no-undef的检查报错
  6. UBI系统原理分析【转】
  7. p点到(a,b)点两所在直线的垂点坐标及p点是否在(a,b)两点所在直线上
  8. jquery选择器玩得不6啊,只能慢慢写判断了,唉..........................
  9. 全排列之递归与非递归算法实现总结
  10. 【转】推荐两款富文本编辑器:NicEdit和Kindeditor