Java中json的生成和解析
1、json格式化工具 http://www.json.cn
1.fastjson List转JSONArray
List<T> list = new ArrayList<T>();
JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
2.fastjson JSONArray转List
JSONArray array = new JSONArray();
List<EventColAttr> list = JSONObject.parseArray(array.toJSONString(), EventColAttr.class);
3.fastjson 字符串转List
String str = "";
List<T> list = JSONObject.parseArray(str,T.class);
4、gson 字符串转list,list转string
String s = "[\"ff\",\"dwe\",\"好的\"]";
Gson gson = new Gson();
ArrayList arrayList = gson.fromJson(s, ArrayList.class);
if (arrayList!=null && arrayList.size()>0) {
String join = String.join(" ", arrayList);
System.out.println("keywords_text is : "+join);
}
2、生成json
(1)方法一:需要jar包:gson-2.8.2.jar
链接: https:// pan.baidu.com/s/1jLgB-l -UHxetmQ9Xtw6iZA 提取码:gapa
<1>生成json
package casia.cmp;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
public class TestJson {
public static void main(String[] args) {
//创建一个json对象,相当于一个容器,当然这个容器还可以套在另外一个容器里面,这个看业务需要
JsonObject jsonContainer =new JsonObject();
//为当前的json对象添加键值对
jsonContainer.addProperty("category", "nba");
jsonContainer.addProperty("team", "lakers");
//构建json数组,数组里面也是json
JsonArray arrayPlayer = new JsonArray();
//构建json数组中的对象
JsonObject player1 = new JsonObject();
player1.addProperty("name", "kobe");
player1.addProperty("height", "198cm");
player1.addProperty("weight", "115kg");
JsonObject player2 = new JsonObject();
player2.addProperty("name", "fisher");
player2.addProperty("height", "183cm");
player2.addProperty("weight", "85kg");
//将json对象添加到数组中
arrayPlayer.add(player1);
arrayPlayer.add(player2);
//最后将json数组装到jsonContainer中
jsonContainer.add("player", arrayPlayer);
System.out.println(jsonContainer);
}
<2>根据对象生成json
构建一个Student类
package casia.cmp;
public class Student {
private String name;
private int age;
private String id;
private String address;
public Student() {
public Student(String name, int age, String id, String address) {
this.name = name;
this.age = age;
this.id = id;
this.address = address;
实例化一个Student对象,将该对象的信息转为json字符串
package casia.cmp;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Student student = new Student("cmp", 23, "1401104010076", "北京");
//对象转json
Gson gson = new Gson();
String json = gson.toJson(student);//参数为object,所以也可以是一个map
System.out.println(json);
(2)方法二:需要jar包:fastjson-1.2.41.jar
链接: https:// pan.baidu.com/s/1FNYw-v 3Vek4N_3-21g1URw 提取码:obnf
JSONObject jsonObject = new JSONObject();
jsonObject.put("f1", "xxx");
jsonObject.put("f2", "xxx");
String json = jsonObject.toJSONString();
JSONArray jsonArray = new JSONArray();
jsonArray.add(index,jsonObject);//json数组增加元素
jsonArray.add(index,jsonObject);//替换json数组中第index的元素
3、json解析
(1)方法一:需要jar包:gson-2.8.2.jar
json字符串转对象
//json转对象
Gson gson = new Gson();
Student student = gson.fromJson(jsonString, Student.class);
示例
package casia.cmp;
import com.google.gson.Gson;
public class Test {
public static void main(String[] args) {
String jsonString = "{\"name\":\"cmp\",\"age\":23,\"id\":\"1401104010076\",\"address\":\"北京\"}";
Gson gson = new Gson();
//json转对象
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
json字符串转json对象/数组
JsonObject returnData = new JsonParser().parse(jsonString).getAsJsonObject();
JsonArray returnData = new JsonParser().parse(jsonString).getAsJsonArray();
String category = returnData.get("category").getAsString();
示例:
public static void main(String[] args) {
String jsonString = "{\"category\":\"nba\",\"team\":\"lakers\",\"player\":[{\"name\":\"kobe\",\"height\":\"198cm\",\"weight\":\"115kg\"},{\"name\":\"fisher\",\"height\":\"183cm\",\"weight\":\"85kg\"}]}";
JsonObject returnData = new JsonParser().parse(jsonString).getAsJsonObject();
JsonElement category = returnData.get("category");
String asString = category.getAsString();
System.out.println("JsonElement category:" + category);
System.out.println("JsonElement category to String :" + asString);
JsonElement player1 = returnData.get("player");//获得元素
System.out.println("player1: " + player1);
JsonArray asJsonArray = player1.getAsJsonArray();//转为json数组
System.out.println("asJsonArray: " + asJsonArray);
JsonArray asJsonArray2 = returnData.getAsJsonArray("player");//获取key对应的value,并转为json数组
System.out.println("asJsonArray2: " + asJsonArray2);
//asJsonArray和asJsonArray2等价
JsonElement jsonElement = asJsonArray2.get(0);
JsonObject asJsonObject = jsonElement.getAsJsonObject();
System.out.println("asJsonObject: " + asJsonObject);
System.out.println(asJsonObject.get("name"));
}
(2)方法二:需要jar包:fastjson-1.2.41.jar
json字符串转json数组对象
String jsonArray = "[{"key1":"value1"},{"key2":"value2"},{"key3":"value3"},{"key4":"value4"},{"key5":"value5"}]"
String jsonString ="{\"category\":\"nba\",\"team\":\"lakers\",\"player\":[{\"name\":\"kobe\",\"height\":\"198cm\",\"weight\":\"115kg\"},{\"name\":\"fisher\",\"height\":\"183cm\",\"weight\":\"85kg\"}]}";
//转为json数组
JSONArray json = (JSONArray) JSONArray.parse(jsonArray.trim());
JSONObject jo = (JSONObject) json.get(int index);