1.什么是JSON
a.JSON:JavaScript Object Notation;
b.JSON数据是一系列键值对的集合
c.JSON已经被大多数开发人员接受,在网络数据的传输中应用非常广泛
d.JSON相对于XML来讲解析稍微方便一些;
e:JSON VS XML
(1).JSON和XML的数据可读性基本相同
(2).JSON和XML同样拥有丰富的解析手段;
(3)JSON相对于XML来讲,数据体积小;
(4)JSON与JavaScript的交互更加方便
(5).JSON对数据的描述性相对较差
2.JSON的数据格式的特点
一个JSON的例子
{
"name":"zhangsan",
"address":
{
"city":"shengzhen",
"street":"qinghu"
}
}
3.使用Gson解析JSON
1.添加包,下载地址:
http://code.google.com/p/google-gson/
2.新建一个JsonUtils.java的类
package wei.cao;
import java.io.StringReader;
import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.LinkedList;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
public class JsonUtils {
public void parserUserFromJson(String jsonData)
{
/*[{"name":"wei_cao","age":20},{"name":"zhang_san","age":22}]
* 1.开始解析数组
* 2.开始解析对象
* 3.解析键值对
* 4.解析键值对
* 5.解析对象结束
* 6.开始解析对象
* 7.解析键值对
* 8.解析键值对
* 9,解析对象结束
* 10.解析数组结束
* */
//如果需要解析JSON数据,首先要生成一个JsonReader对象
JsonReader reader=new JsonReader(new StringReader(jsonData));
try {
reader.beginArray();
while(reader.hasNext())
{
reader.beginObject();
while(reader.hasNext())
{
String tagName=reader.nextName();
if(tagName.equals("name"))
{
System.out.println("age--->"+reader.nextString());
}
else if(tagName.equals("age"))
{
System.out.println("age--->"+reader.nextInt());
}
}
reader.endObject();
}
reader.endArray();
} catch (Exception e) {
e.printStackTrace();
}
}
//解析单一Json对象
public void parserUserFromJson1(String jsonData)
{
Gson gson=new Gson();
User user=gson.fromJson(jsonData, User.class);
System.out.print("name--->"+user.getName());
System.out.print("name--->"+user.getAge());
}
//解析Json对象的数组
public void parserUserFromJson2(String str)
{
Type listType=new TypeToken<LinkedList<User>>(){}.getType();
Gson gson=new Gson();
LinkedList<User> users=gson.fromJson(str, listType);
for(Iterator<User> iterator=users.iterator();iterator.hasNext();){
User user=(User)iterator.next();
System.out.print("name--->"+user.getName());
System.out.print("name--->"+user.getAge());
}
}
}
3.Activity_JsonActivity.java的内容如下
package wei.cao;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Activity_JsonActivity extends Activity {
/** Called when the activity is first created. */
private Button btnParseJson=null;
//private String jsonData="{\"name\":\"wei_cao\",\"age\":20}";
private String jsonData="[{\"name\":\"wei_cao\",\"age\":20},{\"name\":\"zhang_san\",\"age\":22}]";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnParseJson=(Button)this.findViewById(R.id.btnParseJson);
btnParseJson.setOnClickListener(new ButtonListener());
}
private class ButtonListener implements OnClickListener
{
@Override
public void onClick(View arg0) {
JsonUtils jsonUtils=new JsonUtils();
jsonUtils.parserUserFromJson(jsonData);
}
}
}
package wei.cao;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Activity_JsonActivity extends Activity {
/** Called when the activity is first created. */
private Button btnParseJson=null;
//private String jsonData="{\"name\":\"wei_cao\",\"age\":20}";
private String jsonData="[{\"name\":\"wei_cao\",\"age\":20},{\"name\":\"zhang_san\",\"age\":22}]";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnParseJson=(Button)this.findViewById(R.id.btnParseJson);
btnParseJson.setOnClickListener(new ButtonListener());
}
private class ButtonListener implements OnClickListener
{
@Override
public void onClick(View arg0) {
JsonUtils jsonUtils=new JsonUtils();
jsonUtils.parserUserFromJson(jsonData);
}
}
}