最新消息:欢迎访问Android开发中文站!商务联系微信:loading_in

Android JSON数据格式解析

新手入门 AndroidChina 4838浏览 0评论

一、   JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。

Json建构于两种结构,最后再加一种格式在文章的最后显示出来很少有的格式。

1、“名称/值”对的集合(A collection of name/value pairs)。

不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 如:

{
 "name":"jackson",
 "age":100
 }

2、值的有序列表(An ordered list of values)。

在大部分语言中,它被理解为数组(array)如:

{
 "students":
 [
 {"name":"jackson","age":100},
 {"name":"michael","age":51}
 ]
}

二、java解析JSON步骤

A、服务器端将数据转换成json字符串

首先、服务器端项目要导入json的jar包和json所依赖的jar包至builtPath路径下(这些可以到JSON-lib官网下载:http://json-lib.sourceforge.net/)

JSON <wbr>之JAVA <wbr>解析

然后将数据转为json字符串,核心函数是:

public static String createJsonString(String key, Object value)
{
     JSONObject jsonObject = new JSONObject();
     jsonObject.put(key, value);
     return jsonObject.toString();
}

B、客户端将json字符串转换为相应的javaBean

1、客户端获取json字符串(因为android项目中已经集成了json的jar包所以这里无需导入)

public class HttpUtil
{
     public static String getJsonContent(String urlStr)
     {
          try
             {     // 获取HttpURLConnection连接对象
                   URL url = new URL(urlStr);
                   HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
                   // 设置连接属性
                   httpConn.setConnectTimeout(3000);
                   httpConn.setDoInput(true);
                   httpConn.setRequestMethod("GET");
                   // 获取相应码
                   int respCode = httpConn.getResponseCode();
                   if (respCode == 200)
                   {
                        return ConvertStream2Json(httpConn.getInputStream());
                   }
            } catch (MalformedURLException e)
            {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            } catch (IOException e)
            {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
            return "";
     }
     private static String ConvertStream2Json(InputStream inputStream)
     {
           String jsonStr = "";
           // ByteArrayOutputStream相当于内存输出流
           ByteArrayOutputStream out = new ByteArrayOutputStream();
           byte[] buffer = new byte[1024];
           int len = 0;
           // 将输入流转移到内存输出流中
           try
           {
                 while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)
                 {
                        out.write(buffer, 0, len);
                 }
                 // 将内存流转换为字符串
                 jsonStr = new String(out.toByteArray());
           }  catch (IOException e)
           {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }
           return jsonStr;
     }
}

2、获取javaBean

public static Person getPerson(String jsonStr)
{
     Person person = new Person();
     try
     {    // 将json字符串转换为json对象
          JSONObject jsonObj = new JSONObject(jsonStr);
          // 得到指定json key对象的value对象
          JSONObject personObj = jsonObj.getJSONObject("person");
          // 获取之对象的所有属性
          person.setId(personObj.getInt("id"));
          person.setName(personObj.getString("name"));
          person.setAddress(personObj.getString("address"));
     } catch (JSONException e)
     {
          // TODO Auto-generated catch block
          e.printStackTrace();
     }

     return person;
}

public static List<Person> getPersons(String jsonStr)
{
     List<Person> list = new ArrayList<Person>();

     JSONObject jsonObj;
     try
     {     // 将json字符串转换为json对象
           jsonObj = new JSONObject(jsonStr);
           // 得到指定json key对象的value对象
           JSONArray personList = jsonObj.getJSONArray("persons");
           // 遍历jsonArray
           for (int i = 0; i < personList.length(); i++)
           {
                 // 获取每一个json对象
                 JSONObject jsonItem = personList.getJSONObject(i);
                 // 获取每一个json对象的值
                 Person person = new Person();
                 person.setId(jsonItem.getInt("id"));
                 person.setName(jsonItem.getString("name"));
                 person.setAddress(jsonItem.getString("address"));
                 list.add(person);
           }
     } catch (JSONException e)
     {
           // TODO Auto-generated catch block
           e.printStackTrace();
     }

     return list;
}

这里是第三种格式

{“state”:”true”,”classNo”:["HA_2012","4567","4566","test001"]}

解析的方法为

if (result.getString("state").equals("true")) {
     try {
          JSONArray show=result.getJSONArray("classNo");

          List<String> list=new ArrayList<String>();
          for(int i=0;i<show.length();i++){
                list.add(show.getString(i));
          }
     }
}

到这里三种结束

转载请注明:Android开发中文站 » Android JSON数据格式解析

您必须 登录 才能发表评论!