json和xml解析

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就可以得到整个数据
了,真的很方便,还等什么呢,赶快试试看吧!
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值