package com.example.gsondemo;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import android.os.Bundle;
import android.util.Log;
import android.app.Activity;
public class GsonActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**
* 格式1:
* {"x":[],"y":[{"id":"110","name":"卡特"},{"id":"120","name":"德玛"}]}
*
* 格式2:
* {"x":"100","y":[{"id":"123","name":"木木"},{"id":"456","name":"叮咚"}],"z":{"user":"admin","password":"123456"}}
*
* 格式3:
* {"o":{"x":["a","b","c"]},"p":["d","e","f","g"]}
*/
String value1 = "{\"x\":[],\"y\":[{\"id\":\"110\",\"name\":\"卡特\"},{\"id\":\"120\",\"name\":\"德玛\"}],\"z\":[]}";
String value2 = "{\"x\":\"100\",\"y\":[{\"id\":\"123\",\"name\":\"木木\"},{\"id\":\"456\",\"name\":\"叮咚\"}],\"z\":{\"user\":\"admin\",\"password\":\"123456\"}}";
String value3 = "{\"o\":{\"x\":[\"a\",\"b\",\"c\"]},\"p\":[\"d\",\"e\",\"f\",\"g\"]}";
//格式1测试:
// Gson g = new Gson();
// GsonBean bean = g.fromJson(value1, GsonBean.class);
//
// for (String s:bean.x) {
// Log.d("格式1测试:", s);
// }
// //取值
// for (LOL l : bean.y) {
// Log.d("格式1测试:", l.id+"~~~~~"+l.name);
// }
//格式2测试:
// Gson g = new Gson();
// GsonBean bean = g.fromJson(value2, GsonBean.class);
//
// Log.d("x== ", bean.x);
// for (LOL s:bean.y) {
// Log.d("格式2测试:", s.id+"-----"+s.name);
// }
// Login login = bean.z;
// Log.d("格式2测试:", login.user+"-----"+login.password);
//格式3测试:
Gson g = new Gson();
GsonBean bean = g.fromJson(value3, GsonBean.class);
for (String value:bean.o.keySet()) {
Log.v("格式3测试:", value+"----------"+bean.o.get(value));
}
for (String value:bean.p) {
Log.v("格式3测试:", value);
}
}
}
/**
* 首先我们需要定义一个序列化的Bean
*
*/
class GsonBean{
/**
* 格式1:
* {"x":[],"y":[{"id":"110","name":"卡特"},{"id":"120","name":"德玛"}]}
* 注意:
* 内部嵌套的类必须是static的,要不然解析会出错,
* 类里面的属性名必须跟Json字段里面的Key是一模一样的,
* []括起来的部分是一个List,所以定义为 List<LOL> y 而只用{}嵌套的就定义为 public C c
*/
// public List<String> x;
// //"y":[{"id":"110","name":"卡特"},{"id":"120","name":"德玛"}] 括号里面的就定义为一个对象
// public List<LOL> y;//属性名跟字段名一样
//
// public static class LOL{
// public String id;
// public String name;
// }
/**
* 格式2:
* {"x":"100","y":[{"id":"123","name":"木木"},{"id":"456","name":"叮咚"}],"z":{"user":"admin","password":"123456"}}
* 注意:
* {}嵌套的就定义为 public Login z
*/
// public String x;
// public List<LOL> y;//属性名跟字段名一样
// public Login z;
// public static class LOL{
// public String id;
// public String name;
// }
// public static class Login{
// public String user;
// public String password;
// }
/**
* 格式3:
* {"o":{"x":["a","b","c"]},"p":["d","e","f","g"]}
*
*/
public Map<String,List<String>> o;
public List<String> p;
}
测试结果如下: