工作点滴之Json解析
Android开发过程中,数据传输是难免的,一般组织数据有两种方式:xml格式和json格式。两者解析都非常方便,而且解析工具也都很多,这里不多作比较。
下面就Json格式的解析做一个比较实用的分析:
1) 解析Json格式的数据
2) 解析单个对象
3) 解析对象的集合
一 大前提--什么是Json ?
1.如果不知道什么是Json,先扫一下盲
1)JSON:JavaScript Object Notation
2) JSON数据是一系列键值对的集合
3)官方网址:www.json.org, 去看看就什么都明白了
2.Json vs xml
1) JSON和XML可读性基本相同
2)JSON和XML通用拥有丰富的解析手段
3)JSON相对XML来讲体积更小
4)JSON与JavaScript的交互性更加方便
5) JSON对数据的描述性相对较差
二 Android 中的JSON解析工具
1.从API level 11 开始(也就是Android3.0),在android.util包下就有了JsonReader 和 JsonWriter两个帮助类,供我们来解析和使用json。
2.Android3.0以下系统的最佳的做法是使用Google的gson类库来解析,其实这也是3.0以后的做法,只是集成了进来,
下载地址:http://code.google.com/p/google-gson/downloads/list
3.下载后的jar文件导入到项目中,我相信这大家都会,下面的例子我采用的是gson来解析。
三 JSON实战
1. 解析json格式的数据
比如说有一个User对象,他有两个属性:name和age,当然实际情况可能有更多的属性,
那么用json格式表示就是:{name:"Ian", age: "20"},我相信你懂的。
1)自定义JSON帮助类--JsonUtils
Java代码
public class JsonUtils {
public void parseJson(String jsonData) {
try {
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
while(reader.hasNext()) {
String tagName = reader.nextName();
if(tagName.equals("name")) {
System.out.println("name--->" + reader.nextString());
} else if(tagName.equals("age")) {
System.out.println("age--->" + reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2) Activity代码
Java代码
public class MainActivity extends Activity {
private Button btnStart;
private String jsonDataUser = "{\"name\":\"Ian\",\"age\":20}";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStart = (Button)findViewById(R.id.btnStart);
btnStart.setOnClickListener(new BtnStartSetOnClickListener());
}
private class BtnStartSetOnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
JsonUtils jsonUtils = new JsonUtils();
jsonUtils.parseJson(jsonData);
}
}
}
就这么几行代码,在Console上就可以看到解析输出的信息了,是不是很简单呢?
2. 解析对象
1)上面解析的是字符串形式,如果我们定义一个User对象会怎么样呢?
Java代码
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2) 解析方法
Java代码
public void parseUserFromJson(String jsonData) {
Gson gson =new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println("name---------->" + user.getName());
System.out.println("age---------->" + user.getAge());
}
是不是更简单了呢?
3. 解析集合
1)如果不是单个User,而是ArrayList<User>,那么该怎么解析啊,因为这个太常见了。
要解决这个问题,得先弄明白集合用json该怎么表示,简单来讲“{}”表示一个对象,“[]”表示一个集合,集合里面可以有多个对象,这样表示[{},{},{}]。OK,那么看实战代码,
json数据:
Java代码
private String jsonDataUsers = "[{\"name\":\"Jack\",\"age\":20},{\"name\":\"Tom\",\"age\":22},{\"name\":\"Ian\",\"age\":20}]";
解析代码:
Java代码
public void parseUserFromJson(String jsonData) {
Type typeList = new TypeToken<ArrayList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, typeList);
for(Iterator<User> iterator = users.iterator(); iterator.hasNext();) {
User user = iterator.next();
System.out.println("name---------->" + user.getName());
System.out.println("age---------->" + user.getAge());
}
}
我们可以看到,只是多了一行“Type typeList = new TypeToken<ArrayList<User>>(){}.getType();”,就可以解析出List来,然后迭代List就可以得到整个数据
了,真的很方便,还等什么呢,赶快试试看吧!
相关新闻>>
- 发表评论
-
- 最新评论 更多>>