花括号保存对象,对象可以包含多个名/值对
键值对形式,即Name-Value对的结构结构集合(无序的 )。如:{name1:value1.name2:value2,...}; {"name":"小明","age":"12"}
方括号保存数组,数组可以包含多个对象。
{"root":[{"id":"001","name":"小红"},{"id":"002","name":"小明"},{"id":"003","name":"小丽"}],"total":3,"success":true}
json的创建方式
package com.louddt.ldp.test1.mapper1;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONObject;
import com.louddt.ldp.test1.bean1.Actor;
public class DemoCreateJson {
//String创建json
/**
* {
"name":"王尼玛",
"fans":[{
"name":"小王",
"age":"7"
},{
"name":"小尼玛",
"age":"10"
}]
}
*/
static void StringCrezteJson(){
JSONObject json = new JSONObject();
json.put("name", "王尼玛");
//粉丝是个数组,其实就是嵌套json
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("name","小王");
jsonObject1.put("age",7);
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("name","小尼玛");
jsonObject2.put("age",10);
//从此处可以看出其实list和json也是互相转换的
List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
jsonObjects.add(jsonObject1);
jsonObjects.add(jsonObject2);
json.put("fans",jsonObjects);
System.out.println(jsonObjects);
System.out.println("jsonObject直接创建json:" + json);
}
//第二种方法,用map方式
static void mapCreateJson(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","王尼玛");
Map<String,Object> map1 = new HashMap<String,Object>();
map1.put("name","小王");
map1.put("age",7);
Map<String,Object> map2 = new HashMap<String,Object>();
map2.put("name","小尼玛");
map2.put("age",10);
List<Map> jsonObjects = new ArrayList<Map>();
jsonObjects.add(map1);
jsonObjects.add(map2);
map.put("fans",jsonObjects);
System.out.println("集合中Map创建json对象:" + new JSONObject(map));
}
//第三种,也是比较常用的,用bean转换,(这里用的是map作为子json,如果必须要创建复杂bean对象,建议用Gjson操作)
static void beanCreateJson(){
Actor actor = new Actor();
actor.setName("王尼玛");
Map<String,Object> map1 = new HashMap<String,Object>();
map1.put("name","小王");
map1.put("age",7);
Map<String,Object> map2 = new HashMap<String,Object>();
map2.put("name","小尼玛");
map2.put("age",10);
List<Map> maps = new ArrayList<Map>();
maps.add(map1);
maps.add(map2);
actor.setFans(maps);
System.out.println("java bean创建json对象:" + new JSONObject(actor));
}
public static void main(String[] args) {
//StringCrezteJson();
// mapCreateJson();
beanCreateJson();
}
}
Java解析json数组
package com.louddt.ldp.test1.mapper1;
import java.util.Map;
import org.json.JSONObject;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.louddt.ldp.test1.bean1.Actor;
public class DemoParseJson {
public static void main(String[] args) {
String jsonString = "{\"fans\":[{\"name\":\"小王\",\"age\":7},{\"name\":\"小尼玛\",\"age\":10}],\"name\":\"王尼玛\"}";
//normalParse(jsonString);
beanParse(jsonString);
}
static void normalParse(String jsonString){
JSONObject jsonObject = new JSONObject(jsonString);
//获取普通属性
System.out.println("姓名:");
System.out.println(" " + jsonObject.getString("name"));
//获取数组
System.out.println("粉丝:");
System.out.println(jsonObject.getJSONArray("fans").length());
for (Object fan : jsonObject.getJSONArray("fans")) {
JSONObject object = (JSONObject)fan;
System.out.println(" 姓名:" + object.get("name") + ",年龄:" + object.get("age"));
}
}
//org.json并不支持这种复杂的bean转换,所以这边又导入了gson的包
static void beanParse(String jsonString){
System.out.println("=========Gson解析=========");
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
System.out.println(obj.size());
Actor actor = new Gson().fromJson(obj,Actor.class);
System.out.println("姓名:");
System.out.println(" " + obj.get("name"));
System.out.println("粉丝:");
System.out.println(actor.getFans().size());
for (Map map : actor.getFans()) {
System.out.println(" 姓名:" + map.get("name") + "年龄:" + map.get("age"));
}
}
}也就是
也就是json与Java对象可以相互转