- 什么是JSON
JSON是一种轻量级的数据交换格式。JS数据格式的特点:
JSON建构于两种结构:
1、“名称/值”对的集合
2、值的有序列表(数组)
JSON表示名称/值对的方式:{“firstName”:“MA”,“lastName”:“VINCE”,“email”:“finally_m@foxmail.com”}
表示数组
{“user”:[
{“firstName”:“MA”,“lastName”:“VINCE”,“email”:“finally_m@foxmail.com”},
{“firstName”:“LA”,“lastName”:“VINCE”,“email”:“finally_m@foxmail.com”}]
}
使用GSON需要导入GSON的jar包
JsonReader解析JSON
public void jsonReaderClick(View v){
ArrayList<Person> list= jsonReader();
for (int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
private ArrayList<Person> jsonReader() {
// String json= "{\"user\":[{\"firstName\":\"MA\",\"lastName\":\"VINCE\",\"email\":\"finally_m@foxmail.com\"}, {\"firstName\":\"LA\",\"lastName\":\"VINCE\",\"email\":\"finally_m@foxmail.com\"}] }";
ArrayList<Person> list=new ArrayList<>();
Reader r=new InputStreamReader(getResources().openRawResource(R.raw.person));
JsonReader jr=new JsonReader(r);
try {
jr.beginObject();
if (jr.hasNext()) {
if ("user".equals(jr.nextName())) {
jr.beginArray();//开始解析数组
while (jr.hasNext()) {
Person p = new Person();
jr.beginObject();//开始解析对象
while (jr.hasNext()) {
String name = jr.nextName();
if ("firstName".equals(name)) {
p.firstName = jr.nextString();
} else if ("lastName".equals(name)) {
p.lastName = jr.nextString();
} else if ("email".equals(name)) {
p.email = jr.nextString();
}
}
jr.endObject();//结束对象的解析
list.add(p);
}
}
jr.endArray();//结束数组的解析
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
Person类
public class Person {
String firstName;
String lastName;
String email;
@Override
public String toString() {
return "Person{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
'}';
}
}
效果
生成JSON数据
public void createJSONClick(View v){
ArrayList<Person> list=new ArrayList<>();
Person p1=new Person();
p1.firstName="me";
p1.lastName="vince";
p1.email="vinceqq.com";
Person p2=new Person();
p2.firstName="a";
p2.lastName="ce";
p2.email="ceqq.com";
list.add(p1);
list.add(p2);
JSONObject json=new JSONObject();
JSONArray array=new JSONArray();
try {
for (int i=0;i<list.size();i++){
Person p=list.get(i);
JSONObject obj=new JSONObject();
obj.put("firstName",p.firstName);
obj.put("lastName",p.lastName);
obj.put("email",p.email);
array.put(obj);
}
json.put("person",array);
} catch (JSONException e) {
e.printStackTrace();
}
//测试
System.out.println(json.toString());
}
使用GSON解析json
public void gsonParseJsonClick(View v){
Gson gson=new Gson();
String json="[{\"firstName\":\"MA\",\"lastName\":\"VINCE\",\"email\":\"finally_m@foxmail.com\"},\n" +
" {\"firstName\":\"LA\",\"lastName\":\"VINCE\",\"email\":\"finally_m@foxmail.com\"}]";
Type type=new TypeToken<ArrayList<Person>>(){}.getType();
ArrayList<Person> list= gson.fromJson(json,type);
for (int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
使用GSON生成JSON
public void gsonToJsonClick(View v){
ArrayList<Person> list=new ArrayList<>();
Person p1=new Person();
p1.firstName="me";
p1.lastName="vince";
p1.email="vinceqq.com";
Person p2=new Person();
p2.firstName="a";
p2.lastName="ce";
p2.email="ceqq.com";
list.add(p1);
list.add(p2);
Gson gson=new Gson();
Type type=new TypeToken<ArrayList<Person>>(){}.getType();
String json= gson.toJson(list,type);
System.out.println(json);
}
XML PULL解析
public void pullParserClick(View v){
ArrayList<Person> list= parser();
for (int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
private ArrayList<Person> parser() {
ArrayList<Person> list=new ArrayList<>();
Person p=null;
//创建pull解析器
XmlPullParser pull= Xml.newPullParser();
InputStream in=getResources().openRawResource(R.raw.person);
try {
//设置要解析的文件流
pull.setInput(in,"UTF-8");
//获取当前的事件类型
int eventType=pull.getEventType();
while (eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType){
case XmlPullParser.START_TAG:
String tag=pull.getName();
if("person".equals(tag)){
p=new Person();
p.personid=Integer.parseInt(pull.getAttributeValue(null,"personid"));
}else if ("name".equals(tag)){
p.name=pull.nextText();
}else if ("sex".equals(tag)){
p.sex=pull.nextText();
}else if("age".equals(tag)){
p.age=pull.next();
}else if ("tel".equals(tag)){
p.tel=pull.nextText();
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pull.getName())){
list.add(p);
}
break;
}
//获取下一个事件类型
eventType=pull.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
Person类
public class Person {
int personid;
String name;
String sex;
int age;
String tel;
@Override
public String toString() {
return "Person{" +
"personid=" + personid +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
'}';
}
}