Java下json的解析方法-----GSON与JSONObject
GSON:
Gson是google开发的json格式解析包,其特点是在解析json之前必须知道所传输的json数据格式,并定义一系列层次结构与json层次结构相同的类。换句话说,如果传输的json结构为:
[java] { "name":"relin", "sex":"male", "age":26 }
那么,就必须预先定义一个成员变量名字与json中属性名字完全相同的类:
[java] class Person { public String name; public String sex; public int age; }
Gson解析json有三个特点:
如果预先定义的类中不包含json中的某个属性,则该属性就不会被解析出来,但是其他成员仍然能正常解析
命名必须完全相同,否则不会被正常解析
类的成员变量可以是public,也可以是private
让我们来看两个简单的解析与反解析过程:
1. 定义类:
[java] package com.relin.gson.data; public class Person { private String name; private int age; private int sex; /** * @return the name */ public String getName() { return name+"*****"; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } @Override public String toString() { return name + ":" + age; } }
2. String to json:
[java] private static boolean StringToJson(){ try{ String str = "{\"name\":\"name0\",\"age\":0}"; Gson gson = new Gson(); Person person= gson.fromJson(str, Person.class); System.out.println(person); } catch (Exception e){ return false; } return true; }
3. Json to String:
[java] private static boolean JsonToString(){ try{ Gson gson = new Gson(); ArrayList<Person> persons = new ArrayList<Person>(); for (int i = 0; i < 10; i++) { Person p = new Person(); p.setName("name" + i); p.setAge(i * 5); persons.add(p); } String str = gson.toJson(persons); System.out.println(str); } catch (Exception e){ return false; } return true; }
4. 调用可以如下所示:
[java] package com.relin.gson; import java.util.ArrayList; import com.google.gson.Gson; import com.relin.gson.data.Person; import com.relin.gson.data.UrlResponse; public class Example { private static boolean JsonToString(){ try{ Gson gson = new Gson(); ArrayList<Person> persons = new ArrayList<Person>(); for (int i = 0; i < 10; i++) { Person p = new Person(); p.setName("name" + i); p.setAge(i * 5); persons.add(p); } String str = gson.toJson(persons); System.out.println(str); } catch (Exception e){ return false; } return true; } <pre name="code" class="java"> private static boolean StringToJson(){ try{ String str = "{\"name\":\"name0\",\"age\":0}"; Gson gson = new Gson(); Person person= gson.fromJson(str, Person.class); System.out.println(person); } catch (Exception e){ return false; } return true; }</pre>public static void main(String agrs[]){StringToJson();<br> <pre name="code" class="java"> JsonToString()</pre> }}<p></p> <pre></pre> <br> <p></p> <h2><a name="t1"></a>JSONObject<br> </h2> <p>另一种用与解析json的java api是来自org.json。用其相对比较直观,其中包含有个主要的类:</p> <ul> <li>JSONObject相当与json中的字典类型</li></ul> <ul> <li>JSONArray相当与json中的数组类型<br> </li></ul> <p>基本用法如下:</p><pre name="code" class="java"> //将String字符串转换为json对象 JSONObject jsonObject = new JSONObject(strbody); //提取int型的属性,其属性名为From,其他boolean等类型也类似 int from = jsonObject.getInt("From"); //提取json数组 JSONArray toData= jsonObject.getJSONArray("ToData");</pre><br> <br> <p></p> <br>