Android 解析JSON
来源:互联网 发布:企业办公通讯软件 编辑:程序博客网 时间:2024/06/17 13:56
一、什么是JSON?
JSON是JavaScript Object Notation的简称,起源于js(javascript)它是一种轻量级的数据交换格式,JSON不仅在js中广泛使用,同时还在其他领域得到广泛使用,如c,c++,java,Php,swift等等,成为了一种通用的理想数据交换格式,它有两种数据结构,分别是对象,数组,它形式上有花括号{}和中括号[]嵌套,{}中的是代表对象,[]中的为数组,即对象中有数组,数组中又有对象,而且以及键/值对出现
JSON语法:
json是javascript对象表示语法的子集
- 数据在键值对中
- 数据有逗号分隔
- 花括号保存对象
JSON的值:
- 数字(整数或浮点数)
- 字符串(在双引号中
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
json和xml比较:
- 数据体积小,耗费流量比xml少;
- 可读性比xml稍差,但格式化后也很直观;
- 与JavaScript交互比Xml方便;
- 速度比xml快;
- 拥有和xml同样多的解析方式。
更多信息参考:json官网,json百科
大概了解了JSON,下面将介绍在Android中解析json这三种常用的方式解析json。
本篇博客使用的json文件如下:(这里是获取网络JSON)people.json,别忘了添加<uses-permission android:name="android.permission.INTERNET"/>
{
"sid": "1683",
"note": "想成就大事,就要从小事开始。",
"tags": [
{
"id": "13",
"name": "名人名言"
},
{
"id": "16",
"name": "治愈系"
}
]
}
"sid": "1683",
"note": "想成就大事,就要从小事开始。",
"tags": [
{
"id": "13",
"name": "名人名言"
},
{
"id": "16",
"name": "治愈系"
}
]
}
第一种JSONArray JSONObject:
代码如下:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void parseJson(View view){ new MyTask().execute(); } class MyTask extends AsyncTask{ @Override protected Object doInBackground(Object[] params) { //获取网络Json try { URL url=new URL("http://192.168.1.110:8080/study.json"); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //设置请求方式 connection.setRequestMethod("GET"); //设置连接超时的时间(优化) connection.setConnectTimeout(5000); //获取结果码 int code=connection.getResponseCode(); if(code==200){ //获取服务器返回来的结果 InputStream is=connection.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String str=null; StringBuffer stringBuffer=new StringBuffer(); while ((str=br.readLine())!=null){ stringBuffer.append(str); } Log.i("test",stringBuffer.toString()); JSONObject jsonObject=new JSONObject(stringBuffer.toString()); int sid=jsonObject.getInt("sid"); String note= jsonObject.getString("note"); Log.i("test","sid:"+sid+" note:"+note); JSONArray jsonArray= jsonObject.getJSONArray("tags"); for(int i =0;i <jsonArray.length();i++){ JSONObject jsonObject1=jsonArray.getJSONObject(i); int id=jsonObject1.getInt("id"); String name= jsonObject1.getString("name"); Log.i("test","id:"+id+" name:"+name); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); } }}解析结果:
第二种:GSON解析
添加jar包
点击项目右击打开open Module Settings添加依赖
添加完jar包后,编写实体类:
StudyOne.java
package com.pxd.parsejson;import java.util.List;/** * Created by Administrator on 2017/2/16. */public class StudyOne { private int sid; private String note; private List<StudyTwo> tags; public StudyOne() { } public StudyOne(int sid, List<StudyTwo> tags, String note) { this.sid = sid; this.tags = tags; this.note = note; } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } public List<StudyTwo> getTags() { return tags; } public void setTags(List<StudyTwo> tags) { this.tags = tags; }}
StudyTwo.java
package com.pxd.parsejson;import android.os.Parcel;import android.os.Parcelable;/** * Created by Administrator on 2017/2/16. */public class StudyTwo implements Parcelable{ private int id; private String name; public StudyTwo() { } public StudyTwo(String name, int id) { this.name = name; this.id = id; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(id); dest.writeString(name); } public static final Creator<StudyTwo> CREATOR = new Creator<StudyTwo>() { @Override public StudyTwo createFromParcel(Parcel in) { StudyTwo studyTwo =new StudyTwo(); studyTwo.setId(in.readInt()); studyTwo.setName(in.readString()); return studyTwo; } @Override public StudyTwo[] newArray(int size) { return new StudyTwo[size]; } }; @Override public String toString() { return "StudyTwo{" + "id=" + id + ", name='" + name + '\'' + '}'; }}
JavaBean的编写(重点):
- 其中属性名称和json数据的键名必须相同
- 内部类不必是static(亲测)
- 类属性可以是其他权限修饰符,包括private,并且可以不用写setter和getter(亲测)
代码如下只需把第一种解析方法的代码换成如下代码即可
// 新建Gson对象 Gson gson=new Gson(); StudyOne studyOne=gson.fromJson(stringBuffer.toString(),StudyOne.class); Log.i("test","sid="+studyOne.getSid()+" note="+studyOne.getNote()); List<StudyTwo> studyTwoList =studyOne.getTags(); for(StudyTwo studyTwo : studyTwoList){ Log.i("test", studyTwo.toString()); }
解析结果如下:
第三种解析Fast-json
1.添加jar包到libs目录,点击jar包右击Add As Library
主要代码:
//03FastJson StudyOne studyOne= JSON.parseObject(stringBuffer.toString(),StudyOne.class); Log.i("test","sid="+studyOne.getSid()+" note="+studyOne.getNote()); List<StudyTwo> studyOnes=studyOne.getTags(); for (StudyTwo studytwo:studyOnes){ Log.i("test",studytwo.toString()); }解析结果:
到这,三种方法都成功解析json,是不是感觉json解析Soeasy呢,简单到不想解析。
总结:无论是XML还是JSON,或者HTML的解析都很简单,我们只要知道解析的原理和技巧就能解析任何的XML,JSON数据了。
2 0
- 【json】android json解析
- Android-Android解析JSON
- Android数据解析:Json解析
- android---Json数据解析
- Android Json 数据解析
- android 解析JSON
- android 解析json数据格式
- android 解析json数据格式
- Android 解析json数据格式
- android 解析json数据格式
- android 解析json数据格式
- Android的JSON解析
- Android 解析Json
- android JSON 解析
- Android 解析json数据格式
- android解析Json
- Android解析json数据
- Android Json解析
- Unity UGUI的DrawCall优化(一)
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
- 12天作业1
- 如何给MT8127添加新的分区
- oj1093: A+B for Input-Output Practice (VI)
- Android 解析JSON
- new和malloc的介绍及区别
- PAT1024.科学计数法
- MySQL事务特性
- android小动画之Running Pig
- extjs4 combobox typeAhead 加载远程数据库
- Qt中pro文件从相对路径导入库
- 10046 事件跟踪
- 求两个数中的较大者