JSON的简介以及android 提供的JSON解析类

来源:互联网 发布:女生做春梦 知乎 编辑:程序博客网 时间:2024/05/29 17:26

一、JSON 简介

JSON 全称:JavaScript Object Notation  JavaScript    为JS的一个子集

JSON是一种轻量级的存储和交换文本信息的格式
JSON可独立于语言,不同平台都有对他的解析方法

JSON易于理解,比较直观的显示key - value


JSON  value的值可以是以下类型
(1)整数,浮点数
(2)boolean  true or false
(3)null
(4)String   "字符串"
(5)对象
(6)数组

JSON常见语法的规则
(1)大括号保存对象:
eg: {"name":"张三","age":25, "isStudent":true, "girlFriend":null}
中括号保存数组
eg: 
"Student":[{"name":"张三","age":25, "isStudent":true, "girlFriend":null}               {"name":"李四","age":24, "isStudent":false, "girlFriend":null}          ]


数据在键值对中
数据由逗号分开


ps:嵌套使用
(1)对象中嵌套对象
{     "name":"张三",    "age":23,    "love": {        "love1":"study",        "love2":"play",        "love3":"sleep"         } }

(2)对象中嵌套数组

{     "name":"张三",    "age":23,    "love":[        {"love1":"study"},        {"love2":"play"},        {"love3":"sleep"}         ] }

(3)数组中嵌套对象
{  "love":[        {"love1":"study"},        {"love2":"play"},        {"love3":"sleep"}         ] }


(4)数组中嵌套数组
{  "student":[         "name1":[               {"love1":"study"},               {"love2":"play"},               {"love3":"sleep"}               ]         "name2":[               {"love1":"study"},               {"love2":"play"},               {"love3":"sleep"}               ]            ]}

二、android 提供的API解析(感觉解析的时候需要知道key,不然没法解?  另外还有第三方GSON等解析方式)

JSONObject:获取JSON对象

JSONArray:获取JSON数组

下面是自己写的demo,可帮助理解

public class ParseJSONActivity extends AppCompatActivity {    private TextView tv = null;    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what){                case 1:                    String b = (String) msg.obj;//                    StringBuffer sbuff = parseJson(b);                    StringBuffer sbuff = parseJsonSecond(b);                    Log.d("xu", "sbuff = " + sbuff);                    tv.setText(sbuff);                    break;            }        }    };//    private StringBuffer parseJson(String b) {//        StringBuffer showJson = new StringBuffer();//        try {//            JSONObject persionObj = new JSONObject(b);//            JSONArray persionItem = persionObj.getJSONArray("persion");//            for (int i = 0; i < persionItem.length(); i++) {//                JSONObject jobPerionItem = persionItem.getJSONObject(i);//                Persion persion = new Persion();//                persion.setName(jobPerionItem.getString("name"));//                persion.setAge(jobPerionItem.getInt("age"));//                persion.setWork(jobPerionItem.getBoolean("isWork"));//                persion.setFavorite(jobPerionItem.getString("favorite"));//                Log.d("xuze", "persion = " + persion.toString());//                showJson.append(persion.toString() + "\n");//            }//        } catch (JSONException e) {//            e.printStackTrace();//        }//        return showJson;//    }    private StringBuffer parseJsonSecond(String b){        StringBuffer showJson = new StringBuffer();        try {            JSONObject jo = new JSONObject(b);     //获得JSON对象            JSONArray ja = jo.getJSONArray("ch");  //取key为ch的JSON数组            for (int i = 0; i < ja.length(); i++) {                JSONObject jo1 = ja.getJSONObject(i);  //JSON数组中的每组数组的对象                String a = jo1.getString("names");                showJson.append(a + "  datas = ");                JSONArray jsa = jo1.getJSONArray("data");                int[] datas = new int[jsa.length()];                for (int j = 0; j < jsa.length(); j++) {                    datas[i] = (int) jsa.get(i);                    showJson.append(datas[i] + "  ");                }                showJson.append("    times = ");                JSONArray jsa1 = jo1.getJSONArray("times");                int[] times = new int[jsa1.length()];                for (int m = 0; m < jsa1.length(); m++) {                    times[i] = (int) jsa1.get(i);                    showJson.append(times[i] + "  ");                }                showJson.append("\n");                Log.d("xu", "showJson2 = " + showJson);            }        } catch (JSONException e) {           //文本不符合JSON标准会出错            Log.d("xu", "JSONException");            e.printStackTrace();        }        return showJson;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_parse_json);        initView();    }    private void initView() {        tv = (TextView) findViewById(R.id.parse_json);        tv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                new Thread(new Runnable() {                    @Override                    public void run() {//                        InputStream is = getResources().openRawResource(R.raw.jsontext);                        InputStream is = getResources().openRawResource(R.raw.seconjsontext);                        String a = "";                        if (is != null) {                            ByteArrayOutputStream output = new ByteArrayOutputStream();                            byte[] buffer = new byte[1024];                            int len = -1;                            try {                                while ((len = is.read(buffer)) != -1) {                                    output.write(buffer, 0, len);                                }                                is.close();                                output.close();                                byte[] bytes = output.toByteArray();                                a = new String(bytes, "utf-8");                            } catch (IOException e) {                                e.printStackTrace();                            }                            Log.d("xu", "bytes = " + a);                            Message message = new Message();                            message.obj = a;                            message.what = 1;                            handler.sendMessage(message);                        }                    }                }).start();            }        });    }}


解析文本例子:
{   "persion":[               { "name":"zhangsan", "age":"18", "isWork":true, "favorite":"study" },               { "name":"里斯", "age":"20", "isWork":false, "favorite":"play" },               { "name":"啊无", "age":"19", "isWork":true, "favorite":"sleep" }            ]}
{    "ch":[            {"names":"zhangsan", "data":[2,2,1,1,1,1], "times":[10,11,13,13,23]},            {"names":"lisi", "data":[2,2,1,1,1,1], "times":[10,11,13,13,23]}        ]}




原创粉丝点击