Java基礎知識17--fastJSON 簡單使用(JSONObject)


1.JSON基礎

1.1 JSON概述

JSON或JavaScript Object Notation是一種基於文本的輕量級開放標准,專為人類可讀的數據交換而設計。 程序員已經知道JSON使用的約定,包括C,C ++,Java,Python,Perl等。

  • JSON代表JavaScript Object Notation。

  • 格式由Douglas Crockford指定。

  • 它專為人類可讀的數據交換而設計。

  • 它已經從JavaScript腳本語言擴展而來。

  • 文件擴展名為.json 。

  • JSON Internet Media類型是application/json 。

  • 統一類型標識符是public.json。

JSON的使用場景:

  • 在編寫包含瀏覽器擴展和網站的基於JavaScript的應用程序時使用它。

  • JSON格式用於通過網絡連接序列化和傳輸結構化數據。

  • 它主要用於在服務器和Web應用程序之間傳輸數據。

  • Web服務和API使用JSON格式來提供公共數據。

  • 它可以與現代編程語言一起使用。

 1.2 JSON語法

JSON語法基本上被認為是JavaScript語法的子集; 它包括以下內容 -

  • 數據以名稱/值對表示。

  • 大括號保持對象,每個名稱后跟':'(冒號),名稱/值對用(逗號)分隔。

  • 方括號包含數組,值以(逗號)分隔。

使用案例:

{
   "book": [
      {
         "id": "01",
         "language": "Java",
         "edition": "third",
         "author": "Herbert Schildt"
      },
      {
         "id": "07",
         "language": "C++",
         "edition": "second",
         "author": "E.Balagurusamy"
      }
   ]
}

 2.FastJson

fastjson是目前java語言中最快的json庫,比自稱最快的jackson速度要快,第三方獨立測試結果說明比gson快大約6倍,fastjson采用獨創的算法,將parse的速度提升到極致,超過所有json庫。 FastJson速度最快,fastjson具有極快的性能,超越任其他的Java Json parser。

maven依賴:
mvnrepository地址:https://mvnrepository.com/artifact/com.alibaba/fastjson/1.2.75

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.75</version>
</dependency>

2.1 序列化

 2.1.1 將Map轉成JSON

使用案例:

public class FastJsonTest {
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("key1", "One");
        map.put("key2", "Two");
        String mapJson = JSON.toJSONString(map);
        System.out.println(mapJson);
    }
}

控制台輸出:

{"key1":"One","key2":"Two"}

2.1.2 將List<Map>轉成JSON

使用案例:

/**
 * @Author lucky
 * @Date 2021/12/31 14:40
 */
public class FastJsonTest {
    public static void main(String[] args) {
        List<Map<String, Object>> list = new ArrayList<>();

        Map<String, Object> map1 = new HashMap<>();
        map1.put("key1", "One");
        map1.put("key2", "Two");

        Map<String, Object> map2 = new HashMap<>();
        map2.put("key3", "Three");
        map2.put("key4", "Four");

        list.add(map1);
        list.add(map2);

        String listJson = JSON.toJSONString(list);
        String formatJson = JSON.toJSONString(list, true);


        System.out.println(listJson);
        System.out.println(formatJson);
    }
}

控制台輸出:

[{"key1":"One","key2":"Two"},{"key3":"Three","key4":"Four"}]
[
    {
        "key1":"One",
        "key2":"Two"
    },
    {
        "key3":"Three",
        "key4":"Four"
    }
]

可以輸出格式化后的 JSON 字符串:

String objJson = JSON.toJSONString(Object object, boolean prettyFormat);

2.1.3 自定義JavaBean User轉成JSON

使用案例:

User實體類:

/**
 * @Author lucky
 * @Date 2021/12/31 15:02
 */
@Data
public class User {
    private String name;
    private int age;
}

測試代碼:

public class FastJsonTest {
    public static void main(String[] args) {
        User user=new User();
        user.setName("lucky");
        user.setAge(25);
        String s = JSON.toJSONString(user);
        System.out.println(s);
    }
}

控制台輸出:

{"age":25,"name":"lucky"}

2.1.4 指定輸出日期格式

使用案例:

public class FastJsonTest {
    public static void main(String[] args) {
        String dateJson = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
        System.out.println(dateJson);
    }
}

控制台輸出:

"2021-12-31 15:26:55.100"

2.2 反序列化

反序列化就是把JSON格式的字符串轉化為Java Bean對象。

 2.2.1 將2.1.3案例反序列化

使用案例:

public class FastJsonTest {
    public static void main(String[] args) {
        String userJson="{"age":25,"name":"lucky"}"; 
     User user1
= JSON.parseObject(userJson, User.class);
System.out.println(user1.getName());
}
}

控制台輸出:

lucky

2.2.2 集合反序列化

public class FastJsonTest {
    public static void main(String[] args) {
        String listJson="[{\"key1\":\"One\",\"key2\":\"Two\"},{\"key1\":\"Three\",\"key2\":\"Four\"}]";
        List<Map> maps = JSON.parseArray(listJson, Map.class);
        for(Map<String, Object> map : maps){
            System.out.println(map.get("key1"));
            System.out.println(map.get("key2"));
        }
    }
}

 控制台輸出:

One
Two
Three
Four

3.JSONObject

3.1 構建JSON字符串(toJSONString)

3.1.1 JSONObject 轉 JSON 字符串

直接構建即直接實例化一個JSONObject對象,而后調用其put()方法,將數據寫入。put()方法的第一個參數為key值,必須為String類型,第二個參數為value,可以為boolean、double、int、long、Object、Map以及Collection等。當然,double以及int等類型只是在Java中,寫入到json中時,統一都會以Number類型存儲。

public class FastJsonTest {
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "wjw");
        jsonObject.put("age", 22);
        jsonObject.put("sex", "男");
        jsonObject.put("school", "計量");
        String jsonStr = JSONObject.toJSONString(jsonObject);
        System.out.println(jsonStr);

    }
}

控制台輸出:

{"school":"計量","sex":"男","name":"wjw","age":22}

3.1.2 自定義JavaBean User轉成JSON字符串

相較於前一種方法,實際開發中應用JavaBean構建json的情況更為常見,因為這樣代碼的重用率更高。

    public static void obj2String(){
        User user=new User(); user.setName("lucky"); user.setAge(25); String s = JSONObject.toJSONString(user); System.out.println(s); }

控制台輸出:

{"age":25,"name":"lucky"}

3.2 解析json(parseObject)

3.2.1 JSON 字符串 轉 JSONObject 對象

public class FastJsonTest {
    public static void main(String[] args) {
        String jsonStr1 = "{\"school\":\"計量\",\"sex\":\"男\",\"name\":\"lucky\",\"age\":22}";
        JSONObject jsonObject2 = JSONObject.parseObject(jsonStr1);
        System.out.println(jsonObject2.getString("name"));
        System.out.println(jsonObject2.getInteger("age"));

    }
}

控制台輸出:

lucky
22

3.2.2 JSON 字符串 轉 指定的Map對象

通過使用JSONObject.parseObject(json, 類名.class)進行json數據的解析

方法說明:

public static <T> T parseObject(String text, Class<T> clazz) 

測試案例:

    public static void main(String[] args) {
        Param param=new Param();
        param.setSubsysCode("STPM");
        param.setContentId("10000001");

        String paramStr = JSONObject.toJSONString(param);
        Object object = JSONObject.parseObject(paramStr, Map.class);
        System.out.println(object);

    }

3.2.3 JSON字符串轉JAVA簡單對象

    //json字符串轉java簡單對象
    public static void jsonStrToJavaBean() {
        String s ="{\"action\":\"add\",\"id\":\"1\",\"ordinal\":8,\"organUnitFullName\":\"testJSON\",\"parent\":\"0\",\"suborderNo\":\"58961\"}";
        Data data = JSON.parseObject(s, Data.class);
        System.out.println("data對象"+data.toString());
        System.out.println("action="+data.getAction()+"---id="+data.getId());
        //data對象Data{id='1', suborderNo='58961', organUnitType='null', action='add', parent='0', organUnitFullName='testJSON', ordinal=8}
        //action=add---id=1
 
    }

 

參考文獻:

https://blog.csdn.net/flysun3344/article/details/54707965

https://www.cnblogs.com/wjw1014/p/11677499.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM