Json是一种轻便的数据交换格式,客户端和服务器端用Json来交互数据,会比其他一些交换格式(比如说XML)更省流量.
Json可以用来传递String,Number,Boolean,数组以及对象等格式的数据
Json对象有两种表示方式,一种是JsonObject
{"name":"小探寻","年龄":"21"}
另外一种是Json数组。
[{"name":"小探寻","年龄":"21"},{"name":"Huber","年龄":"20"}]
两种表示方式可以互相嵌套,例如:{"Girls":"[{"name":"小探寻","年龄":"21"},{"name":"Huber","年龄":"20"}]"}
关于Json解析,这里介绍两种方式
1.org.json 这是Android的API自带的Json解析方式
2.com.google.gson 这是Google自己封装的Json解析方式
多说无意义,还是先上代码吧.
Json可以用来传递String,Number,Boolean,数组以及对象等格式的数据
Json对象有两种表示方式,一种是JsonObject
{"name":"小探寻","年龄":"21"}
另外一种是Json数组。
[{"name":"小探寻","年龄":"21"},{"name":"Huber","年龄":"20"}]
两种表示方式可以互相嵌套,例如:{"Girls":"[{"name":"小探寻","年龄":"21"},{"name":"Huber","年龄":"20"}]"}
关于Json解析,这里介绍两种方式
1.org.json 这是Android的API自带的Json解析方式
2.com.google.gson 这是Google自己封装的Json解析方式
多说无意义,还是先上代码吧.
public class MainActivity extends Activity {
//在这里需要对字符进行转义
private String JsonData = "[{\"name\":\"小探寻\",\"age\":\"21\"}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
//将JSON字符串转化成JSONObject对象
JSONObject jsonObject = new JSONObject(JsonData);
//获取JSONObject对象的属性值
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
System.out.println("姓名"+name+",年龄"+age);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
打印结果:
数组形式的JSON解析
public class MainActivity extends Activity {
//在这里需要对字符进行转义
private String JsonData = "[{\"name\":\"小探寻\",\"age\":\"21\"},{\"name\":\"Huber\",\"age\":\"20\"}]";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
//取得JSONArray
JSONArray jsonArray = new JSONArray(JsonData);
//获取JSONObject对象的属性值
for(int i=0; i<jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
System.out.println("姓名"+name+",年龄"+age);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
打印结果:
第二种我们通过Gson来解析.需要Gson的jar包的支持。
public class MainActivity extends Activity {
//在这里需要对字符进行转义
// private String JsonData = "{\"girlName\":\"小探寻\",\"girlAge\":\"21\"}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Gson gson = new Gson();
// //JSON字符串转换成对象,这里注意JSON字符串的key和实体对象的成员变量名要一致,fromJson(参数1,参数2)参数1是要转换的JSON字符串,参数2是要转换的目标对象
// Girl girl = gson.fromJson(JsonData, Girl.class);
// String name = girl.getGirlName();
// int age = girl.getGirlAge();
// System.out.println("姓名"+name+",年龄"+age);
//
//对象转换成JSON字符串
Girl girl = new Girl();
girl.setGirlName("高圆圆");
girl.setGirlAge(31);
Gson gson = new Gson();
//toJson的参数可以是一个对象,也可以是对歌对象的集合如List<Girl>
String jsonString = gson.toJson(girl);
System.out.println(".............."+jsonString);
String JsonData1 = "[{\"girlName\":\"小探寻\",\"girlAge\":\"21\"},{\"girlName\":\"高圆圆\",\"girlAge\":\"31\"}]";
//TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。
List<Girl> girls = gson.fromJson(JsonData1, new TypeToken<List<Girl>>(){}.getType());
for(Girl girl2: girls){
String name = girl2.getGirlName();
int age = girl2.getGirlAge();
System.out.println("姓名"+name+",年龄"+age);
}
}
}
打印结果:
我今天学到的JSON的简单解析基本上就是这样了,还有更多的知识,你们可以自己去学习.