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

一、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]}
        ]
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值