Java解析JSON

来源:互联网 发布:centos pptp安装教程 编辑:程序博客网 时间:2024/05/17 06:36

一、 简介

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;    }






0 0
原创粉丝点击