GSON:
Gson是google开发的json格式解析包,其特点是在解析json之前必须知道所传输的json数据格式,并定义一系列层次结构与json层次结构相同的类。换句话说,如果传输的json结构为:
{
"name":"relin",
"sex":"male",
"age":26
}
那么,就必须预先定义一个成员变量名字与json中属性名字完全相同的类:
class Person {
public String name;
public String sex;
public int age;
}
Gson解析json有三个特点:
- 如果预先定义的类中不包含json中的某个属性,则该属性就不会被解析出来,但是其他成员仍然能正常解析
- 命名必须完全相同,否则不会被正常解析
- 类的成员变量可以是public,也可以是private
让我们来看两个简单的解析与反解析过程:
1. 定义类:
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:
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:
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. 调用可以如下所示:
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; }
public static void main(String agrs[]){StringToJson();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; }
}}JsonToString()
JSONObject
另一种用与解析json的java api是来自org.json。用其相对比较直观,其中包含有个主要的类:
- JSONObject相当与json中的字典类型
- JSONArray相当与json中的数组类型
基本用法如下:
//将String字符串转换为json对象
JSONObject jsonObject = new JSONObject(strbody);
//提取int型的属性,其属性名为From,其他boolean等类型也类似
int from = jsonObject.getInt("From");
//提取json数组
JSONArray toData= jsonObject.getJSONArray("ToData");