国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java中對象和JSON格式的轉(zhuǎn)換

這篇具有很好參考價值的文章主要介紹了java中對象和JSON格式的轉(zhuǎn)換。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

java中對象和JSON格式的轉(zhuǎn)換

JSON

JSON(javaScript Object Notation)一種輕量級的數(shù)據(jù)交換格式,具有良好的可讀性和可拓展性。

它采用鍵值對的方式表示數(shù)據(jù),支持基本數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型??捎糜诿枋鼋Y(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。

結(jié)構(gòu)

對象結(jié)構(gòu)(無序):

無序的對象結(jié)構(gòu)在不同語言中稱法不同

對象(object):一個對象包含一系列非排序的鍵/值對,一個對象以 {開始,并以 }結(jié)束。每個鍵/值對之間使用 :分區(qū)。多個鍵值對之間通過 , 分割。

數(shù)組結(jié)構(gòu)(有序):

有序的的數(shù)組結(jié)構(gòu)。將數(shù)組作為有序數(shù)組進(jìn)行轉(zhuǎn)換JSON,就可以得到有序的JSON數(shù)組結(jié)構(gòu)

數(shù)組:一個數(shù)組包含一系列排序的鍵/值對,一個對象以 [開始,并以 ]結(jié)束。每個鍵/值對之間使用 :分區(qū)。多個鍵值對之間通過 , 分割。

java 對象轉(zhuǎn)json字符串,特訓(xùn)營,知識點,java,java,開發(fā)語言

tips:

  1. 需要注意的是JSON 的鍵是一個 String 類型的字符串。
  2. 值(value):可以是雙引號括起來的字符串(string)、數(shù)值(number)true、false、 null對象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套使用。
  3. JSON格式不支持注釋,且字符串必須使用雙引號"",而不是 單引號。
  4. JSON格式可以使用一些轉(zhuǎn)義字符

JSON在java中的使用

Java中并沒有內(nèi)置JSON的解析,因此使用JSON需要借助第三方類庫。

java 中常見的解析 json第三方庫(jar包)

  1. -JSON官方
  2. - GSON
  3. - FastJson
  4. - Jackson 2
  5. - hutool-json

每種方式生成和解析進(jìn)行闡述

1.使用JSON官方提供的JSON

官方提供的JSON具有通用性,就是解析時有點費事。
maven依賴:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

生成JSON對象
1.使用JSONObject添加對象
代碼:

 @Test
    public void Test3(){
    	//創(chuàng)建JSON對象
        JSONObject jsonObject = new JSONObject();
        Object obj = null;
        //像JSON對象中添加數(shù)據(jù)
        jsonObject.put("name", "張三");
        jsonObject.put("age", 20);
        jsonObject.put("birth", "1998-01-01");
        jsonObject.put("haveCar", obj);
        jsonObject.put("hasGirlfriend", true);
        jsonObject.put("likes", new String[]{"看電影", "看書"});
		//將JSON對象以字符串的形式打印
        System.out.println(jsonObject.toString());
        
    }

結(jié)果:
java 對象轉(zhuǎn)json字符串,特訓(xùn)營,知識點,java,java,開發(fā)語言

在字符串輸出的時候會發(fā)現(xiàn),輸出的字符串與數(shù)據(jù)存儲的順序可能是不一致的。原因是調(diào)用jsonObject.put()方法的時候,其底層是一個 HashMap,數(shù)據(jù)被存到了HashMap 中。 HashMap根據(jù)鍵的哈希碼來決定鍵的位置,所以可能會出現(xiàn)上面的問題。

2.javaBean轉(zhuǎn)JSON
javaBean:

public class User {
    private String name;
    private int age;
    private String[] likes;
    // 省略 get 與 set 方法
}

JavaBean TO JSON:

public static void beanToJsonTest() {
    User user = new User();

    user.setName("張三");
    user.setAge(20);
    user.setLikes(new String[]{"看電影", "看書"});

    JSONObject jsonObject = new JSONObject(user);
    System.out.println(jsonObject.toString());
}

解析JSON

首先有兩張表,分別是學(xué)生表和年級表,年紀(jì)和學(xué)生是一對多關(guān)系

//JSON字符串
String json = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'劉一','age':16},{'id':102,'name':'劉二','age':23}]}";
//將JSON字符串轉(zhuǎn)為JSON對象
JSONObject jsonObject = JSONObject.fromObject(json);
//創(chuàng)建年級對象,然后進(jìn)行解析JSON,并賦值
Grade grade = new Grade();
grade.setId(jsonObject.getInt("id"));
grade.setName(jsonObject.getString("name"));
//創(chuàng)建一個集合用來存儲學(xué)生對象
ArrayList<Student> students = new ArrayList<>();
JSONArray stus = jsonObject.getJSONArray("stus");
//遍歷JSONArray對象,解析后放入集合中
for (Object o : stus) {
    JSONObject jsonObject1 = JSONObject.fromObject(o);
    Student student = new Student(jsonObject1.getInt("id"),jsonObject1.getString("name"), jsonObject1.getInt("age"));
    students.add(student);
    }
grade.setStus(students) ;   
//至此一個JSON字符串解析為Java對象

2.使用GSON

maven依賴:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.2</version>
    </dependency>

生成JSON對象:

public static void beanToJsonTest() {
    User user = new User();

    user.setName("張三");
    user.setAge(20);
    user.setLike(new String[]{"看電影", "看書"});

    /**
    * 使用GsonBuilder 可以作一些額外處理,比如格式化輸出,預(yù)處理等
    * 
    * GsonBuilder gsonBuilder = new GsonBuilder();
    * gsonBuilder.setPrettyPrinting();    
    * Gson gson = gsonBuilder.create();
    */
    Gson gson = new Gson();
    System.out.println(gson.toJson(user));
}

解析JSON

public static void jsonToBeanTest() {
        String jsonStr = "{\"name\":\"李四\",\"age\":22 , \"like\":[\"看電影\",\"看書\"],\"birth\":\"1996-01-01\"}";
        GsonBuilder gsonBuilder = new GsonBuilder();
        // 設(shè)置日期轉(zhuǎn)換格式
        gsonBuilder.setDateFormat("yyyy-MM--dd");   
        Gson gson = gsonBuilder.create();
        //解析對象:第一個參數(shù):待解析的字符串 第二個參數(shù)結(jié)果數(shù)據(jù)類型的Class對象
        User user = gson.fromJson(jsonStr, User.class);
    }

3.使用FastJSON

FastJSON是阿里巴巴的產(chǎn)品,效率最高,深受廣大程序員的喜愛
maven依賴:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

生成JSON對象:
創(chuàng)建JSON 對象非常簡單,只需使用 JSONObjectfastJson提供的json對象) 和 JSONArrayfastJson提供json數(shù)組對象) 對象即可。

@Test
public void whenGenerateJson_thanGenerationCorrect() throws ParseException {
    JSONArray jsonArray = new JSONArray();
    for (int i = 0; i < 2; i++) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE", 10);
        jsonObject.put("FULL NAME", "Doe " + i);
        jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
        jsonArray.add(jsonObject);
    }
    // jsonString --> obj
	//String[] strings = JSON.parseObject(str, String[].class);
   // System.out.println(Arrays.toString(strings));
    // obj --> jsonString
    String jsonOutput = jsonArray.toJSONString();
}
    

解析JSON

@Test
public void whenJson_thanConvertToObjectCorrect() {
    Person person = new Person(20, "John", "Doe", new Date());
    String jsonObject = JSON.toJSONString(person);
    Person newPerson = JSON.parseObject(jsonObject, Person.class);

JSON 對象與字符串的相互轉(zhuǎn)化
最常用的就是這個直接轉(zhuǎn)化了,來吧:

//從字符串解析JSON對象
JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鳥教程\"}");
//從字符串解析JSON數(shù)組
JSONArray arr = JSON.parseArray("[\"菜鳥教程\",\"RUNOOB\"]\n");
//將JSON對象轉(zhuǎn)化為字符串
String objStr = JSON.toJSONString(obj);
//將JSON數(shù)組轉(zhuǎn)化為字符串
String arrStr = JSON.toJSONString(arr);
4.使用JackSon

jackSon解析JSON,SpringMVC內(nèi)置的解析器就是這個
maven依賴:

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

生成JSON字符串

ArrayList<Student> students = new ArrayList<>();
for (int i = 0; i < 3; i++) {
     students.add(new Student(100 + i, "二稿" + i, 1000 + i));
}
Grade grade = new Grade(22, "語文", students);
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(grade);
System.out.println(s);

解析JSON字符串

// 對象嵌套數(shù)組嵌套對象
String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"劉一\",\"age\":16}]}";
// 數(shù)組
String json2 = "[\"北京\",\"天津\",\"杭州\"]";

ObjectMapper mapper = new ObjectMapper();
Grade grade = mapper.readValue(json1, Grade.class);
System.out.println(grade);

List<String> list = mapper.readValue(json2, newTypeReference<List<String>>() {});
System.out.println(list)
5、hutool-json

maven依賴:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.0.6</version>
</dependency>

字符串 轉(zhuǎn) JSONObject

String jsonStr = "{\"DispositionNotificationListObject\":{\"DispositionNotificationObject\":[{\"PersonObject\":{\"GenderCode\":0,\"EthicCode\":0,\"DeviceID\":\"0\",\"SourceID\":\"022019121117052900016\",\"SubImageList\":{\"SubImageInfoObject\":[{\"Type\":\"11\",\"StoragePath\":\"xxx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134716\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"11\",\"StoragePath\":\"xxx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"14\",\"StoragePath\":\"xxx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1}]},\"LeftTopY\":141,\"LeftTopX\":104,\"Name\":\"圖片姓名測試\",\"InfoKind\":1,\"PersonID\":\"0220191211170529000180100019\",\"RightBtmY\":806,\"RightBtmX\":932,\"IDNumber\":\"\"},\"NotificationID\":\"202002031736\",\"DispositionID\":\"71\",\"TriggerTime\":\"2020-02-03 15:34:15\",\"Title\":\"第三方1400告警信息接收測試\"}]}}";
JSONObject json = new JSONObject(jsonStr);

解析 JSONObject:

1)獲取對象

JSONObject dispositionNotificationListObject = json.getJSONObject("DispositionNotificationListObject");

2)獲取單值

String alertPersonName = personObject.getStr("Name");
Integer eventSort = subImageInfoObject.getInt("EventSort");

字符串 轉(zhuǎn) JSONArray

String jsonArrayStr = "[{\"Type\":\"11\",\"StoragePath\":\"http://192.168.166.203:11180/storage/v1/image/global?cluster_id=ShenSi&uri_base64=bm9ybWFsOi8vcmVwb3NpdG9yeS1idWlsZGVyLzIwMjAwMTIwL1ZRQnV1LVlsWFpGd29lN1dJSnlXUmc9PUAx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134716\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"11\",\"StoragePath\":\"http://192.168.166.203:11180/storage/v1/image/global?cluster_id=ShenSi&uri_base64=bm9ybWFsOi8vcmVwb3NpdG9yeS1idWlsZGVyLzIwMjAwMTIwL0gzc1dYN3lXRmh1Zmd0Sjd6Tlo1cnc9PUAx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"14\",\"StoragePath\":\"http://192.168.166.203:11180/storage/v1/image/global?cluster_id=ShenSi&uri_base64=bm9ybWFsOi8vcmVwb3NpdG9yeS1idWlsZGVyLzIwMjAwMTIwL0JXS3RIQm1aVXpUT3prNzJOYW50S1E9PUAx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1}]";
JSONArray jsonArray = new JSONArray(jsonArrayStr);

解析 JSONArray:

1)獲取數(shù)組對象

JSONArray subImageInfoObjectList = subImageList.getJSONArray("SubImageInfoObject");

2)獲取單值

for(int j=0; j< jsonArray.size(); j++){
    JSONObject subImageInfoObject = jsonArray.getJSONObject(j);
    String Type = subImageInfoObject.getStr("Type");
    Integer width = subImageInfoObject.getInt("Width");   
    System.out.println(Type);
}

tips:

此時,我們深克隆實現(xiàn)就有三種了:
- 自定義 clone 實現(xiàn) 【麻煩死了】
- 將引用數(shù)據(jù)類型的字段也克隆一份
- 使用序列化實現(xiàn)
- 將對象序列化為字節(jié)流,再反序列化為對象
- 通過JSON,使用第三方庫實現(xiàn) 【推薦】
- 使用第三方庫實現(xiàn)深克隆,比如:GSON、FastJson、Jackson 2、hutool-json文章來源地址http://www.zghlxwxcb.cn/news/detail-759408.html

到了這里,關(guān)于java中對象和JSON格式的轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java 列表json格式的字符串轉(zhuǎn)列表對象 并遍歷取值

    導(dǎo)入依賴與包 最后輸出的數(shù)據(jù); 以上即為本人項目中的處理思路,若有幫助到你,那真的太好了! 若沒有望親噴

    2024年02月15日
    瀏覽(28)
  • <Java工具類>json字符串、List Map,List 對象轉(zhuǎn)換為相應(yīng)的JavaBean對象

    依賴: 工具類(直接上代碼): 使用場景: (1).使用泛型方法:把json字符串轉(zhuǎn)換為相應(yīng)的JavaBean對象 ; 一般用于:Controller層: 例如: (2).List Map轉(zhuǎn)換List 對象:如List,將第二個參數(shù)傳遞為Student對象; (3).List 對象轉(zhuǎn)換List Map:

    2024年02月12日
    瀏覽(29)
  • Json對象和Json字符串之間相互轉(zhuǎn)換

    Json對象和Json字符串之間相互轉(zhuǎn)換

    作為前端開發(fā),在和后端進(jìn)行聯(lián)調(diào)接口時,總會遇到要求傳JSON字符串或是JSON對象,或者是返回值里是JSON字符串要在頁面上展示JSON對象這種情況,都需要前端開發(fā)人員對Json對象和Json對象進(jìn)行相互轉(zhuǎn)換,得到想要的結(jié)果。 廢話不多說,直接上干貨: 1.首先定義一個Json對象:

    2024年02月11日
    瀏覽(34)
  • 【JavaSE專欄88】Java字符串和JSON對象的轉(zhuǎn)換,轉(zhuǎn)來轉(zhuǎn)去就是這么玩!

    【JavaSE專欄88】Java字符串和JSON對象的轉(zhuǎn)換,轉(zhuǎn)來轉(zhuǎn)去就是這么玩!

    作者主頁 :Designer 小鄭 作者簡介 :3年JAVA全棧開發(fā)經(jīng)驗,專注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 JSON 的概念,以及 Java 中 JSON 對象和字符串的轉(zhuǎn)換方法,并給出了樣例代

    2024年02月04日
    瀏覽(25)
  • 將對象轉(zhuǎn)換為JSON字符串,即手寫JSON.stringify

    分析: Date將轉(zhuǎn)為string undefined、Symbol會直接過濾掉,但如果是數(shù)組項是undefined、Symbol、Function,那么則返回null 正則RegExp會返回空對象{} NaN、Function、null會返回null,但是呢,function會被過濾掉 Infinity會轉(zhuǎn)為null 如果是數(shù)組的話,返回的是數(shù)組的序列化 string返回原始值 number、b

    2024年02月11日
    瀏覽(28)
  • JS 將 json 對象轉(zhuǎn)成字符串并保留格式 - JSON.stringify()

    JS 將 json 對象轉(zhuǎn)成字符串并保留格式 - JSON.stringify()

    JSON.stringify(value, replacer, space) value :將要序列化成一個 JSON 字符串的值。 replacer(可選) :如果該參數(shù)是一個函數(shù),則在序列化過程中,被序列化的值的每個屬性都會經(jīng)過該函數(shù)的轉(zhuǎn)換和處理;如果該參數(shù)是一個數(shù)組,則只有包含在這個數(shù)組中的屬性名才會被序列化到最終的

    2024年02月13日
    瀏覽(28)
  • 微信小程序開發(fā)——json對象和字符串轉(zhuǎn)換

    微信小程序開發(fā)——json對象和字符串轉(zhuǎn)換

    JSON對象和字符串的互轉(zhuǎn) 注意事項 1、JSON操作時一定要保證是JSON格式的字符串,或?qū)ο蟆?報錯如下: 原代碼 1)JSON對象轉(zhuǎn)字符串 2)JSON字符串轉(zhuǎn)對象 解決:JSON字符串轉(zhuǎn)對象時,字符串值應(yīng)該是 跳轉(zhuǎn)設(shè)置是:“…?item=”+jsonstr,即字符參數(shù)是 item ,所以轉(zhuǎn)換時要取值 options

    2024年02月11日
    瀏覽(40)
  • JavaScript 中JSON 字符串和對象之間的轉(zhuǎn)換。

    用于將 JavaScript 對象轉(zhuǎn)換為 JSON 字符串。 它接受一個 JavaScript 對象作為參數(shù),并返回對應(yīng)的 JSON 字符串表示。例如: 用于將 JSON 字符串轉(zhuǎn)換為 JavaScript 對象。 它接受一個 JSON 字符串作為參數(shù),并返回對應(yīng)的 JavaScript 對象。例如: ?

    2024年01月23日
    瀏覽(22)
  • java將json字符串轉(zhuǎn)換成json數(shù)組

    java將json字符串轉(zhuǎn)換成json數(shù)組

    有些時候我們需要將json字符串轉(zhuǎn)換成數(shù)組,并且只取一些屬性值進(jìn)行下一個方法的賦值,這樣就涉及到了json字符串的轉(zhuǎn)換了, json字符串有兩種形式,一種是以{A,B,C},一種是[{A},{B},{C}]。但是很多時候是這兩種的結(jié)合。 首先導(dǎo)入jar包 如果是第一種只需要加入以下代碼,注意

    2024年02月11日
    瀏覽(27)
  • JAVA 字符串JSON Map 對象轉(zhuǎn)化

    目錄 字符串轉(zhuǎn)JSON JSON 轉(zhuǎn)字符串 json字符串轉(zhuǎn)map 將map轉(zhuǎn)成json字符串 map轉(zhuǎn)對象 將對象轉(zhuǎn)化成map 將對象轉(zhuǎn)化成JSON Json轉(zhuǎn)對象 方式一 第一步 將map 轉(zhuǎn)成json字符串對象 第二步 將json字符串對象轉(zhuǎn)化成對象 第一步 將對象轉(zhuǎn)化成json字符串 第二步 將JSON字符串轉(zhuǎn)成map 方法一:fastjson轉(zhuǎn)

    2024年02月15日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包