首先,我们需要在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();
}