1. 程式人生 > >常見的三種json操作工具(jackson,gson,fastjson)

常見的三種json操作工具(jackson,gson,fastjson)

一  jackson

Jackson有1.x系列和2.x系列,2.x系列有3個jar包需要下載:
jackson-core-2.2.3.jar(核心jar包)
jackson-annotations-2.2.3.jar(該包提供Json註解支援)
jackson-databind-2.2.3.jar (包含以上兩個)

maven依賴

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
</dependency>

由於篇幅和時間原因,這裡不再寫model,都用list,map代替

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * json解析測試
 *
 * @Author: Mr_li
 * @CreateDate: 2018-11-07$ 14:48$
 * @Version: 1.0
 */
public class JackSonTestCase {

    private static ObjectMapper mapper = new ObjectMapper();
    /**
     * 資料準備
     */
    static class getData {

        Map<String, Object> map = new HashMap<String, Object>();

        List<String> list = new ArrayList<>();

        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

        public Map<String, Object> getMap() {
            map.put("name", "張三");
            map.put("age", "18");
            return map;
        }

        public List<String> getList() {
            list.add("a");
            list.add("b");
            return list;
        }

        public List<Map<String, Object>> getListMap() {
            listMap.add(getMap());
            return listMap;
        }
    }

    /**
     * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中實現。
     * ObjectMapper有多個JSON序列化的方法,可以把JSON字串儲存File、OutputStream等不同的介質中。
     * writeValue(File arg0, Object arg1)把arg1轉成json序列,並儲存到arg0檔案中。
     * writeValue(OutputStream arg0, Object arg1)把arg1轉成json序列,並儲存到arg0輸出流中。
     * writeValueAsBytes(Object arg0)把arg0轉成json序列,並把結果輸出成位元組陣列。
     * writeValueAsString(Object arg0)把arg0轉成json序列,並把結果輸出成字串。
     */
    public static void test() throws IOException {
        //javaObj-->>jsonStr
        String json = mapper.writeValueAsString(new getData().getMap());

        //jsonStr-->>jsonObj
        String json1 = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
        //1
        Object o = mapper.readValue(json, Object.class);
        //2
        List<Map<String, Object>> beanList = mapper.readValue(json, new TypeReference<List<Map<String, Object>>>() {
        });
    }

    public static void main(String[] args) throws IOException {
        JackSonTestCase.test();
    }
}

二 fastjson

fastJson對於json格式字串的解析主要用到了一下三個類:

JSON:fastJson的解析器,用於JSON格式字串與JSON物件及javaBean之間的轉換。

JSONObject:fastJson提供的json物件。

JSONArray:fastJson提供json陣列物件。

maven依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * json解析測試
 *
 * @Author: Mr_li
 * @CreateDate: 2018-11-07$ 14:48$
 * @Version: 1.0
 */
public class FastjsonTestCase {

    private static JSONObject jsonObject = new JSONObject();

    private static JSONArray jsonArr = new JSONArray();

    class Student {

        private String studentName;
        private Integer studentAge;

        public String getStudentName() {
            return studentName;
        }

        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }

        public Integer getStudentAge() {
            return studentAge;
        }

        public void setStudentAge(Integer studentAge) {
            this.studentAge = studentAge;
        }
    }

    /**
     * 資料準備
     */
    static class getData {

        Map<String, Object> map = new HashMap<String, Object>();

        List<String> list = new ArrayList<>();

        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

        public Map<String, Object> getMap() {
            map.put("name", "張三");
            map.put("age", "18");
            return map;
        }

        public List<String> getList() {
            list.add("a");
            list.add("b");
            return list;
        }

        public List<Map<String, Object>> getListMap() {
            listMap.add(getMap());
            return listMap;
        }
    }

    public static void test() throws IOException {
        //jsonStr-->>jsonObj
        String json1 = "{\"studentName\":\"lily\",\"studentAge\":12}";
        JSONObject jsonObject = JSON.parseObject(json1);

        //jsonStr-->>jsonArray
        String json2 = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
        JSONArray jsonArray = JSON.parseArray(json1);

        //jsonstr-->>javaObj
        Student student = JSON.parseObject(json2, Student.class);
        List<Student> list = new ArrayList<Student>();
        ArrayList<Student> list1 = (ArrayList<Student>) JSONObject.parseObject(json2, List.class);

        //javaObj-->>jsonStr
        String jsonString = JSON.toJSONString(student);


    }

    public static void main(String[] args) throws IOException {
        FastjsonTestCase.test();
    }
}

三 gson

目前網路上有很多介面是Json形式的,Gson是谷歌開源的Json解析庫,可以方便的將Java物件轉換成Json字串,也可以方便的將Json字串轉換成Java物件。

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * json解析測試
 *
 * @Author: Mr_li
 * @CreateDate: 2018-11-07$ 14:48$
 * @Version: 1.0
 */
public class GsonTestCase {

    private static Gson gson = new Gson();

    private static JsonParser parser = new JsonParser();

    class Student {

        private String studentName;
        private Integer studentAge;

        public String getStudentName() {
            return studentName;
        }

        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }

        public Integer getStudentAge() {
            return studentAge;
        }

        public void setStudentAge(Integer studentAge) {
            this.studentAge = studentAge;
        }
    }

    /**
     * 資料準備
     */
    static class getData {

        Map<String, Object> map = new HashMap<String, Object>();

        List<String> list = new ArrayList<>();

        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

        public Map<String, Object> getMap() {
            map.put("name", "張三");
            map.put("age", "18");
            return map;
        }

        public List<String> getList() {
            list.add("a");
            list.add("b");
            return list;
        }

        public List<Map<String, Object>> getListMap() {
            listMap.add(getMap());
            return listMap;
        }
    }

    public static void test() throws IOException {
        //jsonStr-->>jsonObj
        String json1 = "{\"studentName\":\"lily\",\"studentAge\":12}";
        JsonObject jsonObject = (JsonObject) parser.parse(json1);

        JsonElement parse = parser.parse(json1);
        JsonObject asJsonObject = parse.getAsJsonObject();

        //jsonStr-->>jsonArray
        String json2 = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
        JsonArray jsonArray = (JsonArray) parser.parse(json1);

        JsonElement parse1 = parser.parse(json1);
        JsonArray asJsonArray = parse1.getAsJsonArray();

        //jsonStr-->>javaObj
        Student student = new Gson().fromJson(json1, Student.class);
        HashMap<String, Student> studentHashMap = gson.fromJson(json1, new TypeToken<HashMap<String, Student>>() {
        }.getType());

        //javaObj-->>jsonStr
        String json = gson.toJson(student);


    }

    public static void main(String[] args) throws IOException {
        GsonTestCase.test();
    }
}

perfect!!!

相關推薦

常見json操作工具(jackson,gson,fastjson)

一  jackson Jackson有1.x系列和2.x系列,2.x系列有3個jar包需要下載: jackson-core-2.2.3.jar(核心jar包) jackson-annotations-2.2.3.jar(該包提供Json註解支援) jackson-datab

常用有json解析jacksonfastjsongson

http ann -- https 解析 enc clas rep depend jackson依賴包 <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson

[轉] 各種Json解析工具比較 - json-lib/Jackson/Gson/FastJson

config 1.2 content pretty 接口實現 turn sso processor true JSON技術的調研報告一 、各個JSON技術的簡介和優劣1.json-libjson-lib最開始的也是應用最廣泛的json解析工具,json-lib 不好的地方確

記錄,js中將字串轉化成json物件的常見方法

js中將字串轉化成json物件的常見三種方法: var data='[{"name":"xiao","age":12},{"name":"xiao","age":12}]'; //方式一 var json1 = JSON.parse(data); dy(":"+json1[

C#學習筆記(12)——方法操作XML

結點 記得 ext 應用程序 eval 資源 特性 pla cells 說明(2017-7-11 16:56:13): 原文地址: C#中常用的幾種讀取XML文件的方法 XML文件是一種常用的文件格式,例如WinForm裏面的app.config以及Web程序中的web.c

數據庫--MyBatis的(insert,update,delete)批量操作

tno open let 項目 sep arraylist htm 子句 由於 轉自:http://blog.csdn.net/starywx/article/details/23268465 前段時間由於項目趕期沒顧上開發過程中的性能問題,現對部分代碼進行優化的過程中發

Java之JSON操作Jackson

單個 string not chan writev except java對象 tom ora Java to JSON: 1 package json.jackson; 2 3 import bean.User; 4 import com.fasterxml.

常見存儲方式DAS、NAS、SAN的架構及比較

DAS NAS SAN存儲的分類 根據服務器類型分為: 封閉系統的存儲(封閉系統主要指大型機) 開放系統的存儲(開放系統指基於window Unix Linux等操作系統的服務器) 開放系統的存儲分為:內置存儲和外掛存儲 外掛存儲根據連接方式分為:直連式存儲(DAS)和網絡化存儲(FAS);網絡化存儲根

夏天必備!筆記本常見降溫方法

不下來 優化 image block alt ima 效果 臺式機 筆記本電腦   由於筆記本“便攜性”和“高性能”的特點,筆記本的內部空間越來越小,但硬盤、CPU和其他的組件在運行過程中產生大量的熱量。筆記本CPU運行頻率越高,它產生的熱量就越多。即便筆記本內置了風扇和散

SpringBoot中預設json轉換工具Jackson

Spring Boot 內建了jackson來完成JSON的序列化和反序列化操作。Jackson使用ObjectMapper類將POJO物件序列化成JSON字串,也能將JSON字串反序列化成POJO物件。 JackSon支援三種層次的序列化和反序列化方式: 採用JsonParser來解

java常用工具類()—— Excel 操作工具

import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io

Java中的移位操作

考慮下面程式的輸出: public class Main { static public void main(String args[]) throws Exception { System.out.println( 0xff >>> 7 )

常見字元編碼的區別:ASCII、Unicode、UTF-8

什麼是字元編碼?        計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255),如果要表示更

Typescript常見函式型別

Typescript有常見三種函式型別: 分別是普通的函式; 有可選引數的函式; 有剩餘引數的函式; 普通函式 function findMan(age:number):string{ return 'find the '+ age + 'yea

python列表刪除操作

列表元素的刪除 del刪除 刪除列表指定位置的元素,實際上是陣列的拷貝 >>> a [0, 1, 15, 2, 3, 4, 5] >>> del a[2] >>> a [0, 1, 2, 3, 4, 5]

SoapUI、Jmeter、Postman介面測試工具的比較分析

前段時間忙於介面測試,也看了幾款介面測試工具,簡單從幾個角度做了個比較,拿出來與諸位分享一下吧。各位如果要轉載,請一定註明來源,最好在評論中告知博主一聲,感謝。本報告從多個方面對介面測試的三款常用工具進行比較分析,以便於在特定的情況下選擇最合適的工具,或者使用自己編寫的工具。

SoapUI、Jmeter、Postman介面測試工具的比較分析——灰藍

前段時間忙於介面測試,也看了幾款介面測試工具,簡單從幾個角度做了個比較,拿出來與諸位分享一下吧。各位如果要轉載,請一定註明來源,最好在評論中告知博主一聲,感謝。本報告從多個方面對介面測試的三款常用工具進行比較分析,以便於在特定的情況下選擇最合適的工具,或者使用自己編寫的工

json物件和java物件的相互轉換方法(json-lib、jacksonfastjsongson)

一 使用json-lib包下的JSONObject和JSONArray轉換 程式碼如下: package com.test.test; import java.util.ArrayList; import java.util.List; import com.cn.e

mongoDB 常見異常解析 (附配置)

配置 mongoDB配置 <mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}" credentials="${mongo.user}:${mon

Android 常見彈框 在專案中的運用

一丶概述 彈框在Android專案中經常出現,常見的實現方法有三種:Dialog 彈框,Window彈框,Activity偽彈框。本文就說一說三種彈框的實現及在專案中的運用。 二丶演示圖         圖一為常見的三種彈框(文末上鍊接),圖二為專案中用到的Activi