图1 JSON对象结构示意图
如下的代码是一个简单的JSON对象示例:
{ "id":, "name":"jack", "age": }1.2数组
图2 JSON数组结构示意图
如下的代码是一个简单的JSON数组示例:
["北京","上海","广州"]
1.3值的类型
在JSON的对象和数组结构中,value值不仅可以是数字、字符串等简单数据类型,还可以是对象、数组等,如图3所示。
图3 JSON中值的类型
因此,我们可以使用对象和数组的组合构成复杂的数据结构。如下的代码使用对象结构定义了一个“students”对象,在“students”对象中包含了一个学生数组,而学生数组中的值又是JSON对象。
{ "students": [ {"name":"jack","age":}, {"name":"rose","age":} ] }2.在服务器端生成JSON数据
public class JsonTools { /* * Function :生成JSON数据 * Param : keyJson数据的键值 * object 要生成Json数据的内容 * Retuen :JSON数据 * Author :博客园-依旧淡然 */ public static String createJsonString(String key, Object value) { JSONObject jsonObject = new JSONObject();//创建一个JSONObject对象 jsonObject.put(key, value); //往JSONObject对象中填入内容 return jsonObject.toString();//生成JSON数据并返回 } }通过使用该方法,我们可以很方便的将各种数据传递进来,并将其转化成JSON数据。比如,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:
/** Function :获取Person对象列表* Author :博客园-依旧淡然*/ public List<Person> getListPerson() { List<Person> list = new ArrayList<Person>(); Person person = new Person(, "jack", ); Person person = new Person(, "rose", ); Person person = new Person(, "bob", ); list.add(person); list.add(person); list.add(person); return list; }其中,Person对象具有id(int)、name(String)和age(int)三个属性。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-"); request.setCharacterEncoding("utf-"); response.setCharacterEncoding("utf-"); PrintWriter out = response.getWriter(); List<Person> listPerson = jsonService.getListPerson(); String str = null; String action_flag = request.getParameter("action_flag");//获取URL参数 if(action_flag.equals("persons")) { str = JsonTools.createJsonString("persons", listPerson); } out.println(str); out.flush(); out.close(); }可以看到,在doPost()方法中,我们通过调用getListPerson()方法获得了Person对象列表listPerson,并将其传入JsonTools.createJsonString()方法中,从而获得了一串JSON数据。
图4 生成的JSON数据
3.在客户端解析JSON数据
通过上面的步骤,我们已经在服务器上生成了JSON数据。要在我们的Android工程中获取该JSON数据是很容易的,只需要利用Android为我们提供的HttpURLConnection接口访问图4所示的URL即可。
那么,获取到服务器上的JSON数据以后,如何在Android工程中完成对该JSON数据的解析呢?
观察图4所示的JSON数据可以看出:
(1)该JSON数据的最外层是JSONObject,JSONObject的键是“persons”,值是一个JSONArray。
(2)在JSONArray中又包含了3个JSONObject对象。
(3)而在内嵌的每一个JSONObject对象中,都有3个键值对的组合。
分析清楚了JSON数据的构成形式之后,就可以开始着手对其进行解析了。在Android工程中,我们可以创建一个JsonTools类,并实现getListPerson()类方法,用来完成把从服务器获得的Json数据解析出来,还原成Person对象列表。具体
代码如下所示:
/** Function :解析JSON数据,还原成Person对象列表* Param :keyJson数据的键值*jsonString 从服务器获得的Json数据* Retuen :Person对象列表* Author:博客园-依旧淡然*/ public static List<Person> getListPerson(String key, String jsonString) { List<Person> list = new ArrayList<Person>(); try { JSONObject jsonObject = new JSONObject(jsonString); //创建JSONObject对象 JSONArray personArray = jsonObject.getJSONArray(key);//获取JSONObject对象的值,该值是一个JSON数组 for(int i = ; i < personArray.length(); i++) { JSONObject personObject = personArray.getJSONObject(i); //获得JSON数组中的每一个JSONObject对象 Person person = new Person(); int id = personObject.getInt("id"); //获得每一个JSONObject对象中的键所对应的值 String name = personObject.getString("name"); int age = personObject.getInt("age"); person.setId(id);//将解析出来的属性值存入Person对象 person.setName(name); person.setAge(age); list.add(person);//将解析出来的每一个Person对象添加到List中 } } catch (JSONException e) { e.printStackTrace(); } return list; }在本实例中,点击Button按钮向服务器发送获取JSON数据的请求,从服务器获得JSON数据后,可以使用以上的代码完成对JSON数据的解析,最后将解析得到的Person对象依次显示在TextView控件中。程序运行的结果如图5所示。
图5 运行结果
以上内容是小编给大家分享的Android随手笔记44之JSON数据解析的全部叙述,希望大家喜欢。