JSON的简介以及android 提供的JSON解析类
来源:互联网 发布:女生做春梦 知乎 编辑:程序博客网 时间:2024/05/29 17:26
一、JSON 简介
JSON 全称:JavaScript Object Notation JavaScript 为JS的一个子集
JSON是一种轻量级的存储和交换文本信息的格式JSON可独立于语言,不同平台都有对他的解析方法
JSON易于理解,比较直观的显示key - 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
- JSON的简介以及android 提供的JSON解析类
- android提供的json解析类
- android提供的json解析类
- json——android提供的json解析类
- Android 简介json解析的使用
- XML解析和Json解析简介以及两者的区别
- Android的JSON解析
- Android的Json解析
- Android的JSON解析
- Android的JSON解析
- android json的解析
- android json的解析
- android的json解析
- Android之简单的JSON解析和XML解析简介
- JSON的解析以及创建
- json的解析方式以及json的拼装
- Android中json的解析
- android中json的解析
- cp: cannot create regular file `/usr/local/bin/orange': Text file busy
- 内存对齐以及位域
- 数组类型
- 石子合并(一)
- MyEclipse-Maven编写WordCount时问题总结
- JSON的简介以及android 提供的JSON解析类
- Word自动生成书籍目录
- 负数的带符号和不带符号的移位运算
- python numpy包的使用一 基本操作
- Oracle(三)(数据查询)
- 【Android】点击应用进而打开base.apk的调用流程再分析
- Linux下的V4L2的编程总结
- 四元数和欧拉角学习
- jsp中文传递参数乱码。