查看“Gson 解析动态 Key”的源代码
←
Gson 解析动态 Key
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[Category:Android]] 2021-08-02 16:36:41 == 旧文章 == [https://blog.silica.moe/2017/05/24/%e4%bd%bf%e7%94%a8-gson-%e8%a7%a3%e6%9e%90%e5%b8%a6%e6%9c%89%e5%8a%a8%e6%80%81-key-%e7%9a%84-json/ Silica Blog] == 要解析的 json == <pre> { "sessions": { "19656": { "bh_files": { "slides": { "url": "http://i.blackhat.com/asia-20/Thursday/asia-20-Kruger-WiFi-Brokering.pdf" }, "whitepaper": { "url": "http://i.blackhat.com/asia-20/Thursday/asia-20-Kruger-WiFi-Whitepaper.pdf" }, "source_code": { "url": "https://github.com/sensepost/wpa_sycophant" } } } } } </pre> == 目标 == 19656 为动态 Key,目标是拿到所有 url 的 Value。 == Bean.java == 根 bean。由于动态 Key 就在 sessions 下面,所以用 Map 来解析 sessions 的内容。<br> <pre> public class Bean { public Map<String, JsonElement> sessions; } </pre> == Bean2.java == 子 bean。由于内容就在动态 Key 上面,里面已经没有动态 Key 了,所以里面的 bean 照常用 GsonFormat 生成即可。<br> <pre> public class Bean2 { private BhFilesBean bh_files; public BhFilesBean getBh_files() { return bh_files; } public static class BhFilesBean { private SlidesBean slides; private WhitepaperBean whitepaper; private SourceCodeBean source_code; public SlidesBean getSlides() { return slides; } public WhitepaperBean getWhitepaper() { return whitepaper; } public SourceCodeBean getSource_code() { return source_code; } public static class SlidesBean { private String url; public String getUrl() { return url; } } public static class WhitepaperBean { private String url; public String getUrl() { return url; } } public static class SourceCodeBean { private String url; public String getUrl() { return url; } } } } </pre> == 解析 == <pre> Bean bean = null; try { bean = new Gson().fromJson(data, Bean.class); } catch (JsonSyntaxException e) { e.printStackTrace(); } StringBuilder builder = new StringBuilder(); for (String key : bean.sessions.keySet()) { Log.d("NeneLog", key); Bean2 bean2; try { bean2 = new Gson().fromJson(bean.sessions.get(key), Bean2.class); } catch (JsonSyntaxException e) { Log.d("NeneLog", "解析失败"); continue; } if (bean2.getBh_files().getSlides().getUrl().length() > 0) { if (!bean2.getBh_files().getSlides().getUrl().contains("github")) { builder.append(bean2.getBh_files().getSlides().getUrl()).append("\n"); } } if (bean2.getBh_files().getSource_code().getUrl().length() > 0) { if (!bean2.getBh_files().getSource_code().getUrl().contains("github")) { builder.append(bean2.getBh_files().getSource_code().getUrl()).append("\n"); } } if (bean2.getBh_files().getWhitepaper().getUrl().length() > 0) { if (!bean2.getBh_files().getWhitepaper().getUrl().contains("github")) { builder.append(bean2.getBh_files().getWhitepaper().getUrl()).append("\n"); } } } etResult.setText(builder.toString()); </pre>
返回至“
Gson 解析动态 Key
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
已展开
已折叠
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最新更新
随机页面
日常
日常
生产
同人
笔记
Android
uni-app
iOS
Windows
Java
PHP
Linux
macOS
Unity
Cocos
刷机
cas
岁月留声
课程表
番组表
经典电视
经典音乐
经典动画
经典应用程式
外链
Animax Asia 節目表
Animax (含 HD) 節目表
i-Fun 愛放動漫 節目表
My 101 綜合台 節目表
就是節目表
全国郵便番号一覧 (日本)
Rainy Mood
Test Your Cloudflare Threat Score
管理
快捷方式
工具
链入页面
相关更改
特殊页面
页面信息