首发于 json系列

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

链接: pan.baidu.com/s/1jLgB-l 提取码: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

链接: pan.baidu.com/s/1FNYw-v 提取码: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);