首先,我們需要在code.google.com/p/google-gson/downloads/list下載gson-1.6.jar,然後將文件導入到你需要解析的項目中去。
gson中解析Json數據用JsonReader。
gson可以將Json數據轉化爲Java對象:
1. 先有一個Json對象String str ="{\"name\":\"Michael\",\"age\":20}",Json類可以直接把Json數據轉化爲Java對象
2. 創建User類
public class User{
privateString name;
private int age;
public void setName(Stringname){
this.name= name;
}
public String getName(){
returnname;
}
public void setAge(int age){
this.age= age;
}
public int getAge(){
return age;
}
}
3. 創建Gson對象
Gson gson = new Gson();
//第二個是指示轉爲哪個類的對象
User user = gson.fromJson(str , User.class);
Sysout.out.println(user.getName);
Sysout.out.println(user.getAge);
也可以將Json數組轉換爲Java對象:
1. 這是Json數據,String str ="[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]"。這個Json數據有一個數組,數組裏面有兩個Json對象
2. 首先必須生成Type對象,使用以下的方式(User是上面的User類):
listType= new TypeToken<LinkedList<User>>(){}.getType();
3. 生成Gson對象
Gsongson = new Gson();
4.
LinkedList<User>users = gson.fromJson(str , listType);
5. 循環迭代LinkedList
for(Iteratoriterator = users.iterator ; iterator.hasNext() ){
User user = (User)iterator.next();
System.out.println(user.getName());
System.out.println(user.getAge());
}
綜合例子
{
"id": 912345678901,
"age": 33,
"text": "How do I streamJSON in Java?",
"geo": null,
}
紅色部分如果表示有可能爲null,則在判斷的時候需要如下name.equals("geo")&& reader.peek() != JsonToken.NULL
橙色部分要是想不解析其中的Json字段,需要在判斷的時候加上一個else語句如下:else{reader.skipValue()}
例子1
Json數據,後面每一個都是如此不再做任何的解析了,然後跟着就是對應的代碼內容
{
"id": 912345678901,
"text": "How do I stream JSON in Java?",
"geo": null,
"user": {
"name": "json_newb",
"followers_count": 41
}
}
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("id")) {
System.out.println("id:" + reader.nextLong());
} else if (name.equals("text")) {
System.out.println("text:" + reader.nextString());
} else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
System.out.println("text:" + reader.nextString());
} else if (name.equals("user")) {
usernameObject();
} else {
reader.skipValue();
}
}
reader.endObject();
private void usernameObject() throws IOException{
reader.beginObject();
while (reader.hasNext()) {
String nxtName = reader.nextName();
if (nxtName.equals("name")) {
System.out.println("nxtName:" + reader.nextString());
} else if (nxtName.equals("followers_count")) {
System.out.println("nxtName:" + reader.nextInt());
}
}
例子2.
[
{
"id": 912345678901,
"text": "How do I stream JSON in Java?",
"geo": null,
"user": {
"name": "json_newb",
"followers_count": 41
}
},
{
"id": 777777777888,
"text": "dfngsdnglnsldfnsl",
"geo": null,
"user": {
"name": "dsfgpd",
"followers_count": 24
}
}
]
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("id")) {
System.out.println("id:" + reader.nextLong());
} else if (name.equals("text")) {
System.out.println("text:" + reader.nextString());
} else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
System.out.println("text:" + reader.nextString());
} else if (name.equals("user")) {
usernameObject();
} else {
reader.skipValue();
}
}
reader.endObject();
}
reader.endArray();
例子3.
{
"statuses":[
{
"id": 912345678901,
"text": "How do Istream JSON in Java?",
"geo": null,
"user": {
"name": "json_newb",
"followers_count": 41
}
},
{
"id": 777777777888,
"text":"dfngsdnglnsldfnsl",
"geo": null,
"user": {
"name": "dsfgpd",
"followers_count": 24
}
}
]
}
reader.beginObject();
while(reader.hasNext())
{
String begin = reader.nextName();
if(begin.equals("statuses"))
{
array();
}
}
reader.endObject();
private void array() throws IOException{
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("id")) {
System.out.println("id:" + reader.nextLong());
} else if (name.equals("text")) {
System.out.println("text:" + reader.nextString());
} else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
System.out.println("text:" + reader.nextString());
} else if (name.equals("user")) {
usernameObject();
} else {
reader.skipValue();
}
}
reader.endObject();
}
reader.endArray();
}
private void usernameObject() throws IOException{
reader.beginObject();
while (reader.hasNext()) {
String nxtName = reader.nextName();
if (nxtName.equals("name")) {
System.out.println("nxtName:" + reader.nextString());
} else if (nxtName.equals("followers_count")) {
System.out.println("nxtName:" + reader.nextInt());
}
}
reader.endObject();
}