JSON概念:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。
JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。比XML更轻量级,Json使用起来比较轻便和简单。JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。
JSON应用
(1).JSON是一种轻量级的数据交换格式
(2).JSON基于两种数据结构:Object和Array。其中Object是“名称/值”对的集合。
首先我们先来一个简单的热身:
来解析一个相对简单的内容,下面附送的内容为解析的片段,但大体的结构是相同的。
{
"ok": true,
"data": [
{
"name": "北京",
"code": "110000",
"children": [
{
"name": "东城区",
"code": "110101"
},
{
"name": "西城区",
"code": "110102"
},
{
"name": "朝阳区",
"code": "110105"
},
{
"name": "丰台区",
"code": "110106"
},
{
"name": "石景山区",
"code": "110107"
},
{
"name": "海淀区",
"code": "110108"
},
{
"name": "门头沟区",
"code": "110109"
},
{
"name": "房山区",
"code": "110111"
},
{
"name": "通州区",
"code": "110112"
},
{
"name": "顺义区",
"code": "110113"
},
{
"name": "昌平区",
"code": "110114"
},
{
"name": "大兴区",
"code": "110115"
},
{
"name": "怀柔区",
"code": "110116"
},
{
"name": "平谷区",
"code": "110117"
},
{
"name": "密云县",
"code": "110228"
},
{
"name": "延庆县",
"code": "110229"
}
]
},
{
"name": "天津",
"code": "120000",
"children": [
{
"name": "和平区",
"code": "120101"
},
{
"name": "河东区",
"code": "120102"
},
{
"name": "河西区",
"code": "120103"
},
{
"name": "南开区",
"code": "120104"
},
{
"name": "河北区",
"code": "120105"
},
{
"name": "红桥区",
"code": "120106"
},
{
"name": "东丽区",
"code": "120110"
},
{
"name": "西青区",
"code": "120111"
},
{
"name": "津南区",
"code": "120112"
},
{
"name": "北辰区",
"code": "120113"
},
{
"name": "武清区",
"code": "120114"
},
{
"name": "宝坻区",
"code": "120115"
},
{
"name": "滨海新区",
"code": "120116"
},
{
"name": "宁河县",
"code": "120221"
},
{
"name": "静海县",
"code": "120223"
},
{
"name": "蓟县",
"code": "120225"
}
]
}}
首先:我们所看到上附的内容,是由中括号[]和{}组成。所以我们主要解析的内容也是围绕着这两个符号进行的。
谨记:
中括号[]代表的是数组=》JSONObject
大括号{}代表的是对象=》JSONArray
只要搞清楚二者对应的关系,解析so easy。哈哈
接着就是要理清楚他们之间的关系:
下面的代码,就简单明了的解释了如何运用JSON解析数据
package com.jerehedu.jereduch10;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class PaserJesonActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_paser_jeson);
InputStream is=null;
BufferedReader reader=null;
StringBuilder sbd=new StringBuilder();
try {
//json 对象 对应json中的{}
//json 数组 对应json中的[];
is= getResources().getAssets().open("cityinfo.txt");
reader=new BufferedReader(new InputStreamReader(is));
String row="";
while ((row=reader.readLine())!=null){
sbd.append(row);
}
JSONObject obj=new JSONObject(sbd.toString());
JSONArray ja=obj.getJSONArray("data");
for (int i=0;i<ja.length();i++){
JSONObject jo= (JSONObject) ja.get(i);
if (jo.has("name")){
String name=jo.getString("name");
Log.d("====name", name);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
先读取文件中的数据,然后利用JSON来解析数据。
2.下面这个例子是解析了一个新闻类的文档。
该文档可以在百度API store中搜索的到
package com.jerehedu.jereduch10;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class PaserJeson1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_paser_jeson1);
InputStream is=null;
BufferedReader reader=null;
StringBuilder sbd=new StringBuilder();
try {
is= getResources().getAssets().open("jsonNews.txt");
reader=new BufferedReader(new InputStreamReader(is));
String row="";
while ((row=reader.readLine())!=null){
sbd.append(row);
}
JSONObject obj=new JSONObject(sbd.toString());
JSONObject obj1=obj.getJSONObject("showapi_res_body");
JSONObject obj2=obj1.getJSONObject("pagebean");
JSONArray ja=obj2.getJSONArray("contentlist");
for (int i=0;i<ja.length();i++){
JSONObject jo= (JSONObject) ja.get(i);
String content=jo.getString("content");
Log.d("====content", content);
}
// } catch (IOException e) {
// e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}