本篇内容介绍了“Java实现json数据处理的常用脚本有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
推荐谷歌浏览器,当然其他浏览器也可以的
在network 下,刷新获取目标url
推荐火狐浏览器,直接在火狐的地址栏搜索目标url,就可以得到格式美化后的json数据了
(1) 使用谷歌浏览器,获取目标url进行复制的时候,有一个小细节-选择copy,不要选copy value
因为copy value 会对url中的某些参数进行utf8格式转化
真实业务需求中的数据结构比较复杂,多层嵌套,比如请求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) 方法即可。
原因:可能是网站是在外网,网速受到限制;也可能是该网页的大小太大了(常见情况就是该网页有非常非常多的图片),并且网站还是在外网;
解决:vpn
transferred over network和 resources loaded by the page 区别:
其实和content-encoding: gzip相关;两者的差别就在于压缩上,transferred 是前端页面加载的所有资源经过解压之后的原始大小。
■ 还可以查看某个请求的大小,比如图片请求的大小
一般默认下,直接查看就可以啦(毕竟看完也只是做个大概预判)
(1) 通过过滤,保留接口请求
(2) 直接通过关键词过滤
关键:看的是页面的布局,例如滚动布局,为了获取到url,你需要滚动页面进行刷新;
通用:按F5刷新。
具体情况具体分析,例如你想获得某个点击事件的url,打开network,那就点击一下(按钮),然后观察network新增了一条url。
使用谷歌浏览器,禁止js,如果禁止js后还可以看到页面数据,则是同步数据,否则就是异步数据。
“Java实现json数据处理的常用脚本有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。