Json解析

一、   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字符串,核心函数是:
 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;
    }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。