常用的"小脚本"-json数据处理
小背景:
我们公司项目中的小脚本是一些工具类,比如常用的是MapUtil工具类的一些方法
写公司的MapUtil工具类的方法要注意,方法名的命名,因为方法名,在公司的项目的某个业务流程有对方法名的进行String截取开头字符串然后进行判断
一、工具的使用推荐
1、获取到请求url(接口的形式-一般数据都是json)
推荐谷歌浏览器,当然其他浏览器也可以的
在network 下,刷新获取目标url
2、获取到目标url(是json数据格式)
推荐火狐浏览器,直接在火狐的地址栏搜索目标url,就可以得到格式美化后的json数据了
3、小细节
(1) 使用谷歌浏览器,获取目标url进行复制的时候,有一个小细节-选择copy,不要选copy value
- 因为copy value 会对url中的某些参数进行utf8格式转化
二、网页的Json数据和java代码的Map数据
真实业务需求中的数据结构比较复杂,多层嵌套,比如请求url的json数据:map中嵌套list,然后list的每个元素是map,这个map又嵌套了map。
小细节:要注意嵌套的是map还是list(因为0、1、2、3、4... 既可能是索引下标,也可能只是key):
- 通过火狐浏览器折叠后的形状做判断,比如{} 则是map,如果是[] 说明是list
- 如果是idea 调试,也是要注意debug 模式下的类型提示。因为debug 模式下,比如set类型的数据结构,有5个元素,它会给0、1、2、3、4存储一下元素然后再展示给你观察,但是要是你注意到提示的类型是Set类型的话,你就清楚在内存中,存储的绝对不是0、1、2、3、4 这样连续存储。
1、网页的json数据
例子:
json 数据格式特点:
key:value
键值对之间是冒号形式
■ json 数据的本质:
就是字符串,json字符串。
2、java代码的Map数据
Map 数据格式特点:
key=value
键值对之间是等号形式
3-1、业务处理-json和map的相互转换【json 序列化、反序列化】
(1) 推荐使用: JsonUtil 工具类
其实就是封装了ObjectMapper 关于json和map的相互转换。toObject方法封装的是readValue方法,toJson封装的是writeValueAsString方法。
json转换成map:JsonUtil.toObject(String content, Class valueType) 返回值是一个 T 类型的
或者 JsonUtil.toObject(String content, TypeReference valueTypeRef) 返回值是一个 T 类型的
▷ 返回值还是T 类型(相当于Object类型),要想进一步转换map,可以强转一下
map转成json:JsonUtil.toJson(Object obj)
■ 例子-json转map:
/**
* json字符串(非常普通的key:value)转成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());
/*创建json字符串的方法*/
public static String createJsonString(String key, Object value) {
JSONObject jsonObject = new JSONObject();
jsonObject.put(key, value);
return jsonObject.toString();
}
/**
* json字符串(listmap)转成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转成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转换成map:
readValue(String content, Class valueType) 返回值是一个 T 类型的
或者 readValue(String content, TypeReference valueTypeRef) 返回值是一个 T 类型的
▷ 返回值还是T 类型(相当于Object类型),要想进一步转换map,可以强转一下
map转成json:
writeValueAsString(Object obj)
/**
* map转成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、业务中,将map转成了json字符串后,想获取json字符串中的key或者value
- 如果是数据非常简单,量非常小,可以使用String的相关截取合并函数,但是不建议,因为json数据的key长度不是固定的,截取非常麻烦
思路:将json字符串转成json(节点)对象
节点:这块理解和dom元素的node是一样的。每个元素都可以理解位一个节点。
■ 例子:
细节:如果是一个JsonNode数组,使用jsonNode.elements();读取数组中每个node, 如果不是JsonNode数组,使用jsonNode.elements();返回jsonNode的values
//首先把嵌套map转换json字符串
String jsonStr = mapper.writeValueAsString(oldMap);
//把json字符串转换jsonNode节点对象,通过jsonNode可以获取到想要的字段
JsonNode jsonNode = mapper.readValue(jsonStr, JsonNode.class);
//迭代获取到jsonNode的values
Iterator<JsonNode> elements = jsonNode.elements();
while (elements.hasNext()) {
JsonNode node = elements.next();
System.out.println(node.toString());
}
//也可以迭代获取到jsonNode的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节点对象(看出Object)转成 josn 字符串,使用JsonUtil.toJson(jsonNode) 方法即可。
三、关于网页相关的常识
1、网页打不开
原因:可能是网站是在外网,网速受到限制;也可能是该网页的大小太大了(常见情况就是该网页有非常非常多的图片),并且网站还是在外网;
解决:vpn
2、网页打开慢时,如何查看网页加载的大小和时间
transferred over network和 resources loaded by the page 区别:
其实和content-encoding: gzip相关;两者的差别就在于压缩上,transferred 是前端页面加载的所有资源经过解压之后的原始大小。
■ 还可以查看某个请求的大小,比如图片请求的大小
一般默认下,直接查看就可以啦(毕竟看完也只是做个大概预判)
- 如果想更精准的查看某个请求的情况:
3、善用network 提供的过滤项
(1) 通过过滤,保留接口请求
(2) 直接通过关键词过滤
4、关于刷新获取到请求url
关键:看的是页面的布局,例如滚动布局,为了获取到url,你需要滚动页面进行刷新;
通用:按F5刷新。
具体情况具体分析,例如你想获得某个点击事件的url,打开network,那就点击一下(按钮),然后观察network新增了一条url。
5、快速判断页面的数据是同步加载还是异步加载
使用谷歌浏览器,禁止js,如果禁止js后还可以看到页面数据,则是同步数据,否则就是异步数据。
如果本文对你有帮助的话记得给一乐点个赞哦,感谢!
常用的"小脚本"-json数据处理的更多相关文章
- JavaScript DOM 编程艺术(第二版) 常用JS小脚本
function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') ...
- JavaScript常用的Hook脚本
JavaScript常用的Hook脚本 本文Hook脚本 来自 包子 页面最早加载代码Hook时机 在source里 用dom事件断点的script断点 然后刷新网页,就会断在第一个js标签,这时候就 ...
- 第一个Mac shell 小脚本
大多数程序员都喜欢偷懒的,我也不例外.相信好多Android开发的coder 在网络http请求方面,会浪费很多时间在接口调试这里..有时候,自己写了一个小测试,行还好,不行的话,还要跟写后台的哥们一 ...
- 【转】常用的shell脚本
from:http://blog.sina.com.cn/s/blog_4152a9f501013r6c.html 常用的shell脚本 (2012-10-10 22:09:07) 转载▼ 标签: 杂 ...
- 【多端应用开发系列1.1.1 —— Android:使用新浪API V2】服务器Json数据处理——Json数据概述
[前白] 一些基础的东西本系列中就不再详述了,争取尽量写些必不可少的技术要点. 由于本系列把Web Service 构建放到了第二部分,Android项目就采用新浪微博API v2作为服务器端. [原 ...
- 自动FTP的小脚本
自动FTP的小脚本 使用以下脚本,可以实现自动FTP,将你需要的文件传送到需要的地方,或者将需要的文件从某个地方抓取下来. cd /PATH_YOU_WANT_TO_UPLOAD(DOWNLOAD) ...
- python 小脚本升级-- 钉钉群聊天机器人
一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功 ...
- 常用模块(random,os,json,pickle,shelve)
常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...
- Mac shell 小脚本开发(转)
大多数程序员都喜欢偷懒的,我也不例外.相信好多Android开发的coder 在网络http请求方面,会浪费很多时间在接口调试这里..有时候,自己写了一个小测试,行还好,不行的话,还要跟写后台的哥们一 ...
- 常用数据存储格式之json
常用数据存储格式介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML ...
随机推荐
- CountDownLatch闭锁源码解析(基于jdk11)
目录 CountDownLatch闭锁源码解析(基于jdk11) 1.1 CountDownLatch概述 1.2 CountDownLatch原理 1.2.1 基本结构(jdk11) 1.2.2 a ...
- 《HTTP权威指南》– 3.HTTP方法和状态码
常见HTTP方法: 常用HTTP方法 描述 是否包含主体 GET 从服务器获取一份文档 否 HEAD 只从服务器获取文档的首部 否 POST 向服务器发送需要处理的数据 是 PUT 将请求的主体部分存 ...
- .Net 7 团队把国内的龙芯确实当做一等公民和弃用的项目
楔子: 国内龙芯据说是用的自己的指令集,在研究ILC的时候,发现了龙芯在微软那边确实是一等公民的存在. 龙芯官网 龙芯平台.NET,是龙芯公司基于开源社区.NET独立研发适配的龙芯版本,我们会长期进行 ...
- SQLSERVER 居然也能调 C# 代码 ?
一:背景 1. 讲故事 前些天看到一个奇怪的 Function 函数,调用的是 C# 链接库中的一个 UserLogin 方法,参考代码如下: CREATE FUNCTION dbo.clr_User ...
- [OpenCV实战]27 在OpenCV下使用forEach进行并行像素访问
目录 1 Mat像素访问 1.1 使用at方法直接进行像素访问 1.2 使用指针进行像素访问 1.3 使用forEach方法进行像素访问 1.4 将forEach与C ++ 11 Lambda一起使用 ...
- [R语言] ggplot2入门笔记4—前50个ggplot2可视化效果
文章目录 通用教程简介(Introduction To ggplot2) 4 ggplot2入门笔记4-前50个ggplot2可视化效果 1 相关性(Correlation) 1.1 散点图(Scat ...
- 20 张图带你全面了解 HTTPS 协议,再也不怕面试问到了!
本文详细介绍了 HTTPS 相较于 HTTP 更安全的原因,包括对称加密.非对称加密.完整性摘要.数字证书以及 SSL/TLS 握手等内容,图文并茂.理论与实战结合.建议收藏! 1. 不安全的 HTT ...
- [LeetCode]最大连续1的个数
题目 代码 class Solution { public: int findMaxConsecutiveOnes(vector<int>& nums) { int length= ...
- 【力扣】反转链表I和II(迭代和递归)
前言 有句话叫做:如果面试官跟你看顺眼的话,就给你出一道反转链表,否则就出一道 hard. 所以反转链表不能不会吧,要不面试官想要你都没有机会了. 206. 反转链表 class Solution { ...
- vs2019 内核驱动编译失败:网络共享盘问题
怀念2008 我以为这个年代了,中文路径问题应该解决了,记得vs 2008写c的时候曾因中文路径的问题导致编译不通过,从2015版本开始发现有时候项目名称和路径里包含中文也可以编译通过了,习惯之后后面 ...