在Android中使用自带API操作Json
Json简介
- JavaScript对象表示法(JavaScript Object Notation)
- 是存储和交换文本信息的语法
- 特点
- 是轻量级的文本数据交换格式
- 独立于语言和平台
- 具有自我描述性,更易理解
Json与XML
- 类似XML,比XML更小、更快、更易解析
- 没有结束标签
- 更短
- 读写的速度更快
- 使用数组
- 不使用保留字
Json语法
- 是JavaScript对象表示法语法的子集
- 数组在键值对中
- 数据由逗号分隔
- 大括号保存对象
- 中括号保存数组
- Json值可以是
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组
- 对象
- null
Json对象
-
在大括号中书写,可以包含多个键值对,如
{"firstName":"John", "lastName":"Doe"}
Json数组
-
在中括号中书写,可以包含多个对象,通过逗号分隔
{ "employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ] }
在Android中读取Json数据
-
准备数据test.json
{ "languages":[ {"id":1, "ide":"Eclipse", "name":"Java"}, {"id":2, "ide":"XCode", "name":"Swift"}, {"id":3, "ide":"Visual Sutdio", "name":"C#"} ], "cat":"it" }
- 将test.json复制到项目的assets目录中
-
将test.json中的内容读取到一个字符串中
StringBuilder sBuilder = new StringBuilder(); try { InputStreamReader isr = new InputStreamReader(getAssets().open("test.json"), "UTF-8"); BufferedReader br = new BufferedReader(isr); String line; while((line = br.readLine()) != null) { sBuilder.append(line); } br.close(); isr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
-
解析并显示Json数据
try { JSONObject root = new JSONObject(sBuilder.toString()); Log.d("Tag", "cat=" + root.getString("cat")); JSONArray array = root.getJSONArray("languages"); for (int i = 0; i < array.length(); i++) { JSONObject lan = array.getJSONObject(i); Log.d("Tag", "---------------------------------"); Log.d("Tag", "id=" + lan.getInt("id")); //注意get方法要与json中实际数据类型一致 Log.d("Tag", "ide=" + lan.getString("ide")); Log.d("Tag", "name=" + lan.getString("name")); } } catch (JSONException e) { e.printStackTrace(); }
- 在Logcat中查看结果
在Android中创建Json格式数据
- 需求:创建和上一个小节中test.json完全一致的数据
-
代码如下
try { JSONObject root = new JSONObject(); //1. 创建cat属性并赋值 root.put("cat", "it"); //2. 创建数组中的对象 //{"id":1, "ide":"Eclipse", "name":"Java"} JSONObject lan1 = new JSONObject(); lan1.put("id", 1); lan1.put("ide", "Eclipse"); lan1.put("name", "Java"); //{"id":2, "ide":"XCode", "name":"Swift"} JSONObject lan2 = new JSONObject(); lan2.put("id", 2); lan2.put("ide", "XCode"); lan2.put("name", "Swift"); //{"id":3, "ide":"Visual Sutdio", "name":"C#"} JSONObject lan3 = new JSONObject(); lan3.put("id", 3); lan3.put("ide", "Visual Sutdio"); lan3.put("name", "C#"); //3. 将对象放入数组中 JSONArray array = new JSONArray(); array.put(lan1); array.put(lan2); array.put(lan3); //将数组添置到root中 root.put("languages", array); Log.d("Tag", root.toString()); } catch (JSONException e) { e.printStackTrace(); }
- 在Logcat中查看结果
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。