JSON是一种取代的XML数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。
JSON就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象 即 {“key值”:“value值”}
[] 中括号表示数组 即[ {“key值”:“value值”}, {“key值”:“value值”}, {“key值”:“value值”}]
1、生成JSON字符串
JSONObject jsonObject = new JSONObject();
jsonObject.put(key, value);```
2.解析JSON字符串
1)JavaBean
//json数组
{"data":{"age":10,"id":1,"name":"jack"}}
//
/**
* 解析返回Person类
*
* @param data 获取到的数据
* @return
*/
public static Person getPerson(String key, String jsonString) {
//new一个对象、类似于实体
Person person = new Person();
try {
//把字符串解析成json对象
JSONObject jsonObject = new JSONObject(jsonString);
//获取"data"的json对象,即从json对象中取key是data的值
JSONObject personObject = jsonObject.getJSONObject("data");
//获取数据,并将数据塞入对象中
person.setId(personObject.getInt("id"));
person.setName(personObject.getString("name"));
person.setAddress(personObject.getString("address"));
} catch (Exception e) {
// TODO: handle exception
}
return person;
2)List数组
//包含多个对象
{"persons":[{"age":10,"id":1,"name":"jack"},{"age":11,"id":2,"name":"rose"},{"age":16,"id":3,"name":"tom"}]}
/**
* 解析返回多个Person对象
* @param data 传入的json数据
* @return
*/
public static List getPersons(String key, String jsonString) {
List list = new ArrayList();
try {
JSONObject jsonObject = new JSONObject(jsonString);
// 返回json的数组
JSONArray jsonArray = jsonObject.getJSONArray(key);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
Person person = new Person();
person.setId(jsonObject2.getInt("id"));
person.setName(jsonObject2.getString("name"));
person.setAddress(jsonObject2.getString("address"));
list.add(person);
}
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
public static List getList(String key, String jsonString) {
List list = new ArrayList();
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonArray = jsonObject.getJSONArray(key);
for (int i = 0; i < jsonArray.length(); i++) {
String msg = jsonArray.getString(i);
list.add(msg);
}
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
3)嵌套Map的List数组
public static <List> listKeyMaps(String key,String jsonString) {
List> list = new ArrayList>();
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonArray = jsonObject.getJSONArray(key);
//通过循环获取数据,并放入list集合中
for (int i = 0;i<jsonArray .length();i++){
Map<String,Object> map = new HashMap<>();
int id = jsonArray .getJSONObject(i).getInt("id");
map.put("id",id);
String name = jsonArray .getJSONObject(i).getString("name");
map.put("name",name);
int age = jsonArray .getJSONObject(i).getInt("age");
map.put("age",age);
list.add(map);
}
return list;
}
3.JSONObject、JSONArray区别
1)JSONObject
json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}
2)JSONArray
json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的
Json对象中添加的是键值对,JSONArray中添加的是Json对象
JSONObject Json = new JSONObject();
JSONArray JsonArray = new JSONArray();
Json.put(“key”, “value”);//JSONObject对象中添加键值对
JsonArray.add(Json);//将JSONObject对象添加到Json数组中
3)JSONObject与Map
Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。其实json就是一种特殊形式的map。
Map<String,String> strmap=new JSONObject();
这里的需求是:request对象获取的map,想要返回json格式也不用白费力了。