欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)json數(shù)據(jù)處理的常用腳本分享

 更新時間:2023年03月02日 09:31:00   作者:一樂樂  
這篇文章主要為大家詳細介紹了Java實現(xiàn)json數(shù)據(jù)處理的常用腳本,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以學(xué)習(xí)一下

小背景:

我們公司項目中的小腳本是一些工具類,比如常用的是MapUtil工具類的一些方法

寫公司的MapUtil工具類的方法要注意,方法名的命名,因為方法名,在公司的項目的某個業(yè)務(wù)流程有對方法名的進行String截取開頭字符串然后進行判斷

一、工具的使用推薦

1、獲取到請求url(接口的形式-一般數(shù)據(jù)都是json)

推薦谷歌瀏覽器,當(dāng)然其他瀏覽器也可以的

在network 下,刷新獲取目標(biāo)url

2、獲取到目標(biāo)url(是json數(shù)據(jù)格式)

推薦火狐瀏覽器,直接在火狐的地址欄搜索目標(biāo)url,就可以得到格式美化后的json數(shù)據(jù)了

3、小細節(jié)

(1) 使用谷歌瀏覽器,獲取目標(biāo)url進行復(fù)制的時候,有一個小細節(jié)-選擇copy,不要選copy value

因為copy value 會對url中的某些參數(shù)進行utf8格式轉(zhuǎn)化

二、網(wǎng)頁的Json數(shù)據(jù)和java代碼的Map數(shù)據(jù)

真實業(yè)務(wù)需求中的數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,多層嵌套,比如請求url的json數(shù)據(jù):map中嵌套list,然后list的每個元素是map,這個map又嵌套了map。

小細節(jié):要注意嵌套的是map還是list(因為0、1、2、3、4... 既可能是索引下標(biāo),也可能只是key):

  • 通過火狐瀏覽器折疊后的形狀做判斷,比如{} 則是map,如果是[] 說明是list
  • 如果是idea 調(diào)試,也是要注意debug 模式下的類型提示。因為debug 模式下,比如set類型的數(shù)據(jù)結(jié)構(gòu),有5個元素,它會給0、1、2、3、4存儲一下元素然后再展示給你觀察,但是要是你注意到提示的類型是Set類型的話,你就清楚在內(nèi)存中,存儲的絕對不是0、1、2、3、4 這樣連續(xù)存儲。

1、網(wǎng)頁的json數(shù)據(jù)

json 數(shù)據(jù)格式特點

key:value

鍵值對之間是冒號形式

json 數(shù)據(jù)的本質(zhì)

就是字符串,json字符串。

2、java代碼的Map數(shù)據(jù)

Map 數(shù)據(jù)格式特點

key=value

鍵值對之間是等號形式

3-1、業(yè)務(wù)處理-json和map的相互轉(zhuǎn)換【json 序列化、反序列化】

(1) 推薦使用: JsonUtil 工具類

其實就是封裝了ObjectMapper 關(guān)于json和map的相互轉(zhuǎn)換。toObject方法封裝的是readValue方法,toJson封裝的是writeValueAsString方法。

json轉(zhuǎn)換成map:JsonUtil.toObject(String content, Class valueType) 返回值是一個 T 類型的

或者 JsonUtil.toObject(String content, TypeReference valueTypeRef) 返回值是一個 T 類型的

返回值還是T 類型(相當(dāng)于Object類型),要想進一步轉(zhuǎn)換map,可以強轉(zhuǎn)一下

map轉(zhuǎn)成json:JsonUtil.toJson(Object obj)

例子-json轉(zhuǎn)map

/** 
* json字符串(非常普通的key:value)轉(zhuǎn)成map
*/
String json = createJsonString("user","xiaoming");
       Object object1 = JsonUtil.toObject(json, new TypeReference<Object>() {});//或者使用方法JsonUtil.toObject(json, Object.class);效果也是一樣的
        Map<String, Object> map1 = (Map<String, Object>) object1;
        System.out.println(map1.toString());
        System.out.println(map1.getClass());

	/*創(chuàng)建json字符串的方法*/
    public static String createJsonString(String key, Object value) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put(key, value);
        return jsonObject.toString();
    }


/** 
* json字符串(listmap)轉(zhuǎn)成ListMap
*/
public static List<Map<String, Object>> toListMap(String json) {
    List<Object> list = JsonUtil.toObject(json,  new TypeReference<List<Object>>() {});
        List<Map<String, Object>> listw = new ArrayList<Map<String, Object>>();
        for (Object object : list) {
            Map<String, Object> ret = (Map<String, Object>) object;
            listw.add(ret);
        }
        return listw;
}   
/**
* map轉(zhuǎn)成json字符串
*/
Map<String, Object> oldMap1 = new HashMap<>();
oldMap.put("1", "一");
String json = JsonUtil.toJson(oldMap);
System.out.println(json);

(2) 直接使用:ObjectMapper

map 在java中,可以劃分到更大的范圍進行處理-Object進行處理

json轉(zhuǎn)換成map:

readValue(String content, Class valueType) 返回值是一個 T 類型的

或者 readValue(String content, TypeReference valueTypeRef) 返回值是一個 T 類型的

返回值還是T 類型(相當(dāng)于Object類型),要想進一步轉(zhuǎn)換map,可以強轉(zhuǎn)一下

map轉(zhuǎn)成json:

writeValueAsString(Object obj)

/**
* map轉(zhuǎn)成json字符串
*/
Map<String, Object> oldMap1 = new HashMap<>();
oldMap.put("1", "一");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(oldMap);
System.out.println(json);

3-2、業(yè)務(wù)中,將map轉(zhuǎn)成了json字符串后,想獲取json字符串中的key或者value

如果是數(shù)據(jù)非常簡單,量非常小,可以使用String的相關(guān)截取合并函數(shù),但是不建議,因為json數(shù)據(jù)的key長度不是固定的,截取非常麻煩

思路:將json字符串轉(zhuǎn)成json(節(jié)點)對象

節(jié)點:這塊理解和dom元素的node是一樣的。每個元素都可以理解位一個節(jié)點。

■ 例子:

細節(jié):如果是一個JsonNode數(shù)組,使用jsonNode.elements();讀取數(shù)組中每個node, 如果不是JsonNode數(shù)組,使用jsonNode.elements();返回jsonNode的values

//首先把嵌套map轉(zhuǎn)換json字符串
String jsonStr = mapper.writeValueAsString(oldMap);
//把json字符串轉(zhuǎn)換jsonNode節(jié)點對象,通過jsonNode可以獲取到想要的字段
JsonNode jsonNode = mapper.readValue(jsonStr, JsonNode.class);

//迭代獲取到j(luò)sonNode的values
Iterator<JsonNode> elements = jsonNode.elements();
while (elements.hasNext()) {
    JsonNode node = elements.next();
    System.out.println(node.toString());
}

//也可以迭代獲取到j(luò)sonNode的keys
Iterator<String> keys = jsonNode.fieldNames();
while (keys.hasNext()) {
     String key = keys.next();
     System.out.println("key鍵是:" + key);
}

//通過key 獲取到 value
JsonNode jNode = jsonNode.get(key);//得到value,value可能是普通的值,也可能是map


//獲取到鍵值對
Iterator<Map.Entry<String,JsonNode>> jsonNodes = jsonNode.fields();  
   while (jsonNodes.hasNext()) {  
       Map.Entry<String, JsonNode> node = jsonNodes.next();  
       System.err.println("遍歷獲取key:"+node.getKey());  
       System.err.println("遍歷獲取值:"+node.getValue().toString());
}

JsonNode節(jié)點對象(看出Object)轉(zhuǎn)成 josn 字符串,使用JsonUtil.toJson(jsonNode) 方法即可。

三、關(guān)于網(wǎng)頁相關(guān)的常識

1、網(wǎng)頁打不開

原因:可能是網(wǎng)站是在外網(wǎng),網(wǎng)速受到限制;也可能是該網(wǎng)頁的大小太大了(常見情況就是該網(wǎng)頁有非常非常多的圖片),并且網(wǎng)站還是在外網(wǎng);

解決:vpn

2、網(wǎng)頁打開慢時,如何查看網(wǎng)頁加載的大小和時間

transferred over network和 resources loaded by the page 區(qū)別:

其實和content-encoding: gzip相關(guān);兩者的差別就在于壓縮上,transferred 是前端頁面加載的所有資源經(jīng)過解壓之后的原始大小。

■ 還可以查看某個請求的大小,比如圖片請求的大小

一般默認(rèn)下,直接查看就可以啦(畢竟看完也只是做個大概預(yù)判)

3、善用network 提供的過濾項

(1) 通過過濾,保留接口請求

(2) 直接通過關(guān)鍵詞過濾

4、關(guān)于刷新獲取到請求url

關(guān)鍵:看的是頁面的布局,例如滾動布局,為了獲取到url,你需要滾動頁面進行刷新;

通用:按F5刷新。

具體情況具體分析,例如你想獲得某個點擊事件的url,打開network,那就點擊一下(按鈕),然后觀察network新增了一條url。

5、快速判斷頁面的數(shù)據(jù)是同步加載還是異步加載

使用谷歌瀏覽器,禁止js,如果禁止js后還可以看到頁面數(shù)據(jù),則是同步數(shù)據(jù),否則就是異步數(shù)據(jù)。

到此這篇關(guān)于Java實現(xiàn)json數(shù)據(jù)處理的常用腳本分享的文章就介紹到這了,更多相關(guān)Java json數(shù)據(jù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于jar包與war包的區(qū)別及說明

    關(guān)于jar包與war包的區(qū)別及說明

    這篇文章主要介紹了關(guān)于jar包與war包的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot實現(xiàn)緩存預(yù)熱的幾種常用方案

    SpringBoot實現(xiàn)緩存預(yù)熱的幾種常用方案

    緩存預(yù)熱是指在 Spring Boot 項目啟動時,預(yù)先將數(shù)據(jù)加載到緩存系統(tǒng)(如 Redis)中的一種機制,本文給大家介紹了SpringBoot實現(xiàn)緩存預(yù)熱的幾種常用方案,并通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Java中Connection timed out和Connection refused的區(qū)別講解

    Java中Connection timed out和Connection refused的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于Java中Connection timed out和Connection refused的區(qū)別講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 全解史上最快的JOSN解析庫alibaba Fastjson

    全解史上最快的JOSN解析庫alibaba Fastjson

    這篇文章主要介紹了史上最快的JOSN解析庫alibaba Fastjson,對FastJson感興趣的同學(xué),一定要看一下
    2021-04-04
  • servlet監(jiān)聽實現(xiàn)統(tǒng)計在線人數(shù)功能 附源碼下載

    servlet監(jiān)聽實現(xiàn)統(tǒng)計在線人數(shù)功能 附源碼下載

    這篇文章主要為大家詳細介紹了servlet監(jiān)聽統(tǒng)計在線人數(shù)的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Maven構(gòu)建生命周期詳細介紹

    Maven構(gòu)建生命周期詳細介紹

    這篇文章主要介紹了Maven構(gòu)建生命周期詳細介紹,小編覺得還是挺不錯的,這里分享給大家,需要的朋友可以參考下。
    2017-11-11
  • Dubbo擴展點SPI實踐示例解析

    Dubbo擴展點SPI實踐示例解析

    這篇文章主要為大家介紹了Dubbo擴展點SPI實踐示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • java實現(xiàn)簡單掃雷游戲

    java實現(xiàn)簡單掃雷游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • jsp中EL表達式獲取數(shù)據(jù)

    jsp中EL表達式獲取數(shù)據(jù)

    EL 全名為Expression Language。本文給大家介紹的是在jsp中EL表達式獲取數(shù)據(jù)的幾種方式,希望大家能夠喜歡
    2016-07-07
  • Java的關(guān)鍵字與保留字小結(jié)

    Java的關(guān)鍵字與保留字小結(jié)

    Java 保留字列表 (依字母排序 共14組) : Java保留字是指現(xiàn)有Java版本尚未使用 但以后版本可能會作為關(guān)鍵字使用
    2012-10-10

最新評論