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": "治愈系"
        }
    ]
}
第一种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
原创粉丝点击