您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
推薦谷歌瀏覽器,當(dāng)然其他瀏覽器也可以的
在network 下,刷新獲取目標(biāo)url
推薦火狐瀏覽器,直接在火狐的地址欄搜索目標(biāo)url,就可以得到格式美化后的json數(shù)據(jù)了
(1) 使用谷歌瀏覽器,獲取目標(biāo)url進(jìn)行復(fù)制的時(shí)候,有一個(gè)小細(xì)節(jié)-選擇copy,不要選copy value
因?yàn)閏opy value 會(huì)對(duì)url中的某些參數(shù)進(jìn)行utf8格式轉(zhuǎn)化
真實(shí)業(yè)務(wù)需求中的數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,多層嵌套,比如請(qǐng)求url的json數(shù)據(jù):map中嵌套list,然后list的每個(gè)元素是map,這個(gè)map又嵌套了map。
小細(xì)節(jié):要注意嵌套的是map還是list(因?yàn)?、1、2、3、4... 既可能是索引下標(biāo),也可能只是key):
通過(guò)火狐瀏覽器折疊后的形狀做判斷,比如{} 則是map,如果是[] 說(shuō)明是list
如果是idea 調(diào)試,也是要注意debug 模式下的類型提示。因?yàn)閐ebug 模式下,比如set類型的數(shù)據(jù)結(jié)構(gòu),有5個(gè)元素,它會(huì)給0、1、2、3、4存儲(chǔ)一下元素然后再展示給你觀察,但是要是你注意到提示的類型是Set類型的話,你就清楚在內(nèi)存中,存儲(chǔ)的絕對(duì)不是0、1、2、3、4 這樣連續(xù)存儲(chǔ)。
1、網(wǎng)頁(yè)的json數(shù)據(jù)
json 數(shù)據(jù)格式特點(diǎn)
key:value
鍵值對(duì)之間是冒號(hào)形式
json 數(shù)據(jù)的本質(zhì)
就是字符串,json字符串。
2、java代碼的Map數(shù)據(jù)
Map 數(shù)據(jù)格式特點(diǎn)
key=value
鍵值對(duì)之間是等號(hào)形式
3-1、業(yè)務(wù)處理-json和map的相互轉(zhuǎn)換【json 序列化、反序列化】
(1) 推薦使用: JsonUtil 工具類
其實(shí)就是封裝了ObjectMapper 關(guān)于json和map的相互轉(zhuǎn)換。toObject方法封裝的是readValue方法,toJson封裝的是writeValueAsString方法。
json轉(zhuǎn)換成map:JsonUtil.toObject(String content, Class valueType) 返回值是一個(gè) T 類型的
或者 JsonUtil.toObject(String content, TypeReference valueTypeRef) 返回值是一個(gè) T 類型的
返回值還是T 類型(相當(dāng)于Object類型),要想進(jìn)一步轉(zhuǎn)換map,可以強(qiáng)轉(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中,可以劃分到更大的范圍進(jìn)行處理-Object進(jìn)行處理
json轉(zhuǎn)換成map:
readValue(String content, Class valueType) 返回值是一個(gè) T 類型的
或者 readValue(String content, TypeReference valueTypeRef) 返回值是一個(gè) T 類型的
返回值還是T 類型(相當(dāng)于Object類型),要想進(jìn)一步轉(zhuǎn)換map,可以強(qiáng)轉(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ù)非常簡(jiǎn)單,量非常小,可以使用String的相關(guān)截取合并函數(shù),但是不建議,因?yàn)閖son數(shù)據(jù)的key長(zhǎng)度不是固定的,截取非常麻煩
思路:將json字符串轉(zhuǎn)成json(節(jié)點(diǎn))對(duì)象
節(jié)點(diǎn):這塊理解和dom元素的node是一樣的。每個(gè)元素都可以理解位一個(gè)節(jié)點(diǎn)。
■ 例子:
細(xì)節(jié):如果是一個(gè)JsonNode數(shù)組,使用jsonNode.elements();讀取數(shù)組中每個(gè)node, 如果不是JsonNode數(shù)組,使用jsonNode.elements();返回jsonNode的values
//首先把嵌套map轉(zhuǎn)換json字符串 String jsonStr = mapper.writeValueAsString(oldMap); //把json字符串轉(zhuǎn)換jsonNode節(jié)點(diǎn)對(duì)象,通過(guò)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); } //通過(guò)key 獲取到 value JsonNode jNode = jsonNode.get(key);//得到value,value可能是普通的值,也可能是map //獲取到鍵值對(duì) 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é)點(diǎn)對(duì)象(看出Object)轉(zhuǎn)成 josn 字符串,使用JsonUtil.toJson(jsonNode) 方法即可。
原因:可能是網(wǎng)站是在外網(wǎng),網(wǎng)速受到限制;也可能是該網(wǎng)頁(yè)的大小太大了(常見(jiàn)情況就是該網(wǎng)頁(yè)有非常非常多的圖片),并且網(wǎng)站還是在外網(wǎng);
解決:vpn
transferred over network和 resources loaded by the page 區(qū)別:
其實(shí)和content-encoding: gzip相關(guān);兩者的差別就在于壓縮上,transferred 是前端頁(yè)面加載的所有資源經(jīng)過(guò)解壓之后的原始大小。
■ 還可以查看某個(gè)請(qǐng)求的大小,比如圖片請(qǐng)求的大小
一般默認(rèn)下,直接查看就可以啦(畢竟看完也只是做個(gè)大概預(yù)判)
(1) 通過(guò)過(guò)濾,保留接口請(qǐng)求
(2) 直接通過(guò)關(guān)鍵詞過(guò)濾
關(guān)鍵:看的是頁(yè)面的布局,例如滾動(dòng)布局,為了獲取到url,你需要滾動(dòng)頁(yè)面進(jìn)行刷新;
通用:按F5刷新。
具體情況具體分析,例如你想獲得某個(gè)點(diǎn)擊事件的url,打開(kāi)network,那就點(diǎn)擊一下(按鈕),然后觀察network新增了一條url。
使用谷歌瀏覽器,禁止js,如果禁止js后還可以看到頁(yè)面數(shù)據(jù),則是同步數(shù)據(jù),否則就是異步數(shù)據(jù)。
“Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。