JSON数据解析只要看这个就够了

发布时间:2026/9/16 5:35:43

JSON数据解析只要看这个就够了 项目地址https://github.com/liaozhoubei/HttpAndParseJSON是一种类似 XML的语言是用了存储和交换文本信息的语法。它的全称为JavaScript Object Notation(JavaScript 对象表示法)。与xml对比它更小、更快更易解析。想要更好的解析JSON必须能看懂JSON数据这样就必须了解JSON语法好在它的语法非常简单规则如下JSON 语法是 JavaScript 对象表示法语法的子集。 - 数据在名称/值对中如firstName:John- 数据由逗号分隔 - 花括号保存对象 - 方括号保存数组而组成JSON的值可以为以下几种- 数字整数或浮点数 - 字符串在双引号中 - 逻辑值true 或 false - 数组在方括号中 - 对象在花括号中 - null简单的回顾了一下JSON之后我们就开始正式展开JSON解析之旅了。传统的JSON解析最传统的JSON解析莫过于直接使用java中的方法它通过原生的JSONObject和JSONArray来解析json数据下面我们就来解析这段json数据吧json数据如下{personData: [ {age:12,name:nate,schoolInfo: [ {School_name:清华}, {School_name:北大} ],url:http://pic.yesky.com/uploadImages/2014/345/36/E8C039MU0180.jpg}, {age:24,name:jack, ··· } ],result:1}分析这段json数据第一层是一个花括号括号即jsonObect对象然后这个对象里面有一个personData的JSONArray数组以及一个result属性第二层personData的JSONArray数组它里面除了属性之外还有一个schoolInfo的JSONArray数组第三次是schoolInfo的JSONArray数组里面的JSONObject对象这时我们已经将这段数据分析好了接下来就是写解析方法解析了。创建一个Httpjson继承Thread的线程类它能够打开URL网址然后获取网络中的JSON数据在进行JSON解析代码如下public class HttpjsonextendsThread { private String url;privateContextcontext;private ListView listView;privateJsonAdapteradapter;private Handler handler;public Httpjson(String url, ListView listView,JsonAdapteradapter, Handler handler) { super();this.url url;this.listView listView;this.adapter adapter;this.handler handler;} Override public void run() { URL httpUrl;try { httpUrl new URL(url);··· }/** * 从网络中获取JSON字符串然后解析 * param json * return */private ListPersonjsonParse(Stringjson){ try { ListPerson personlist new ArrayListPerson();JSONObjectjsonObject newJSONObject(json);int result jsonObject.getInt(result);if (result 1) {JSONArrayjsonArrayjsonObject.getJSONArray(personData);for (int i 0; i jsonArray.length(); i) {Person person new Person();JSONObjectpersonData jsonArray.getJSONObject(i);int age personData.getInt(age);String url personData.getString(url);String name personData.getString(name);···JSONArrayschoolInfoArray personData.getJSONArray(schoolInfo);for (intj0; j schoolInfoArray.length(); j) {JSONObjectschoolInfojsonschoolInfoArray.getJSONObject(j);StringschoolNameschoolInfojson.getString(School_name);··· } ··· } return personlist;} else { Toast.makeText(context,erro, Toast.LENGTH_SHORT).show();} } catch (JSONExceptione) { e.printStackTrace();Log.e(JsonParseActivity,json解析出现了问题);} return null;} }其中JsonAdapter和Person对象请看项目代码。这里将json数据解析出来然后放入ListPerson集合中供外部使用。我们按照之前分析来研究这段json解析方法。首先是一个大括号我们直接从传过来的json字符串创建出来的jsonObject就行了然后就可以通过它获取result参数代码如下JSONObject jsonObject new JSONObject(json);int result jsonObject.getInt(result);然后就是解析personData这个json数组我们直接通过数组名称获取代码如下JSONArray jsonArray jsonObject.getJSONArray(personData);再接着就是解析这个数组解析数组都是用循环解析的然后这个数组里面先是一个花括号这又是一个jsonObject对象代码如下JSONArrayjsonArrayjsonObject.getJSONArray(personData);for (int i 0; i jsonArray.length(); i) {JSONObjectpersonData jsonArray.getJSONObject(i);int age personData.getInt(age);String url personData.getString(url);String name personData.getString(name);··· }在personData这个JSONObject对象中又有一个schoolInfo的JSONArray数组我们继续按照上述方法获得JSONArray然后通过for循环获得里面的JSONObject这时已达到最底层我们就可以直接获取School_name属性的值了代码如下for (intj0; j schoolInfoArray.length(); j) {JSONObjectschoolInfojsonschoolInfoArray.getJSONObject(j);StringschoolNameschoolInfojson.getString(School_name);··· }这样一个完整的JSON数据就解析好了当然这只是解析一个简单的JSON数据的方法但是遇到复杂的json数据也可以如此解析首先是分析JSON数据然后就是正式解析json。课后习题在项目中的res-raw文件夹下有newjson.txt的json数据大家可以使用这个来联系一下json解析。当然啦这个json数据的传统解析方式也在项目里面写好了如果不懂也可以参考一下GSON解析Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象或者反过来。这是关于GSON的介绍相对于传统的json解析使用GSON能够极大的简化了解析流程。那么该如何使用GSON解析json数据呢在这里分为以下几步1、在eclipse环境下将gson的jar包复制到libs中因为这是Google提供的java类库是不存在java自带的类库中的。2、获取json数据并且分析。3、写出json数据对应的bean类4、使用gson解析好了那我们真是开始解析吧第一步相信大家都会只需要在网上找到一个gson的jar包就可以了所以我们从第二步开始。从网络中获取json数据以及从其他地方获取数据跟普通的获取数据没什么区别只需要使用IO流进行操作就可以了我们这里着重的研究如何分析json数据以及写出json数据对应的bean类我们在这里获取的是res-raw目录下的mogujson.txt数据数据如下{date:2014-04-23, ···name:蘑菇街,packageName:com.mogujie,safe: [ {safeDes:已通过安智市场官方认证是正版软件, ··· }, {safeDes:已通过安智市场安全检测请放心使用, ··· }, {safeDes:无任何形式的广告, ··· } ],screen: [app/com.mogujie/screen0.jpg, ··· ],size:6746678, ··· }由于行文的关系省略很比较多的数据信息但是大概的信息已经给出。首先最外层毫无疑问是一个JSONObject对象然后里面的date、name可通过JSOnObject直接取出。第二层对象是safe和screen这两个数组然后screen数组里面直接就是一个个的字符串数据也是可以直接取出的。而safe数组这要通过for循环获得里面的JSONObject对象然后在通过JSONObject对象获取safeDes等数据。那么现在就开始写对应的bean类了如果要写出能让gson使用的bean类其中的key也就是名字如date、safe这些必须一一对应起来。其次就是在bean类中遇到花括号就写一个class类遇到方括号就写一个Arraylist数组。这些就是主要规则了所以最外层的花括号就是一个class类所以我们创建一个GsonParseMoGuBean类然后其中又有date、name这些key所以我们直接写出它们对应的类型和名称代码如下publicclassGsonParseMoGuBean{publicStringdata; ···publicStringname; ··· }这是最外层的花括号以及它里面的值使用GSON解析的时候它会直接根据json数据中对应的key也就是data、name这些名字从json找到对应的key然后赋值如果你key名字错误那么就不能获得相应的数据。然后轮到screen和safe这两个数组了screen相对简单它里面就是字符串类型的数据所以我们直接添加String类型的ArrayList就可以了如下publicArrayListString screen;而safe数组就相对复杂它里面是一个个的花括号也就是一个个的JSONObject对象在JSONObject对象里面才是数据那么该如何解析呢safe数组中的JSONObject对象是没有自己的key名字的而遇到JSONObject对象也就是花括号就必须是一个class对象所以我们将这些JSONObject对象对应的class类命名为SafeInfo而SafeInfo则是放置在safe数组里面的所以bean类代码如下publicArrayListSafeInfo safe;publicclassSafeInfo{publicStringsafeDes; ··· } }好的这个与GSON对应的bean类已经写好了那么我们就将详细的bean类代码放出来吧publicclassGsonParseMoGuBean{publicStringdata;publicStringname;publicStringpackageName; ···publicArrayListSafeInfo safe;publicclassSafeInfo{publicStringsafeDes; ··· }publicArrayListString screen; }值得一说的是这个bean类在被GSON使用的时候GSON会直接将解析到的数据存到内存中然后我们可以直接通过GsonParseMoGuBean获取。而且作为一个bean类我们不用GSON而是用JSON的传统解析方法这个bean类也是可以用的。写好对应的bean类我们就直接使用GSON来解析吧~我们在GsonParseActivity这个Activity类中使用在点击bt_mogujson的时候就会开始解析然后在通过TiextVew控件显示在屏幕上用来校验是否解析正确代码如下switch(v.getId()) {caseR.id.bt_mogujson:// 获取mogujson中的数据InputStream inputStream getResources().openRawResource(R.raw.mogujson);StringjsonData StreamUtils.getDecodeString(inputStream,utf-8);// 使用Gson解析Gson gson newGson(); GsonParseMoGuBean mogujie gson.fromJson(jsonData, GsonParseMoGuBean.class); ArrayListSafeInfo safe mogujie.safe;for(SafeInfo info : safe) { System.out.println(info); } ····// 显示部分数据检验是否解析成功tv_gson.setText(safe.toString());break; ··· }我们说看到使用GSON解析就两行代码如下Gson gson new Gson();GsonParseMoGuBean mogujie gson.fromJson(jsonData, GsonParseMoGuBean.class);创建一个GSON对象后直接用fromJson方法将json数据已经json数据对应的bean类传入就可以了所以说使用gson解析极大的简化了解析json的流程一切只需要两步写对应的bean类然后使用gson解析就完成了关于GSON解析就说到这里这里也给出一个课后练习给大家。课后练习在res-raw目录下有newjson.txt的json数据给大家解析当然这也给出了参考答案在GsonParseActivity中。还有一个bilibili.txt的json数据则没有答案需要大家自己解析json解析还是相对简单的只需要多练习就能够掌握了~~项目地址https://github.com/liaozhoubei/HttpAndParse原地址http://www.jianshu.com/p/6096e6740ac9
延伸阅读

更多相关文章

2026/9/15 6:46:00

选择重庆室外舞台音响灯光企业要参考哪些通用评判标准?

选型核心原则本文仅输出室外舞台音响灯光服务企业的通用选型方法,不涉及任何产品或品牌推荐,所有评判标准均有公开权威来源,可自行对照验证。通用选型标准(占比40%)本次标准全部参考公开权威文件制定,涵盖3…

2026/9/16 5:34:24

系统提示词泄露全解析:AI应用安全的根因、检测与工程化防御

事情发生在一个很普通的周五晚上。我朋友做了一款 AI 客服产品,上线刚两周,用户量涨得不错,结果他在后台看到一条对话记录:用户只用了寥寥几句话,就让机器人完整复述了内部系统提示词,包括数据清洗规则、情…

2026/9/16 5:34:24

汽车制造业AI系统应用与关键技术解析

1. 汽车制造AI系统应用现状与行业格局汽车制造业正在经历一场由AI技术驱动的深刻变革。根据2023年最新行业调研数据,全球前十大汽车制造商均已部署AI系统,平均每家企业拥有3.7个核心AI应用场景。从冲压车间到总装线,AI技术正在重塑传统汽车制…

2026/9/16 5:34:24

ReliefF算法原理与MATLAB实现详解

1. ReliefF算法原理与特征选择核心逻辑ReliefF算法是Kononenko于1994年提出的特征权重评估算法,作为Relief算法的扩展版本,特别适用于多类分类问题。其核心思想是通过统计特征在不同类别样本间的区分能力来评估特征重要性。与常见的过滤式特征选择方法&a…

2026/9/16 5:34:24

lerobot实操指南:从数据采集到ACT策略训练与真机部署

写这篇文章的时候,刚好是lerobot系列教程的第六篇。前五篇已经搞定了环境搭建、数据采集、数据集格式整理这些准备工作,都是些听起来琐碎但实际绕不过去的活。这篇把所有准备工作的终点打通:把采集到的轨迹数据真正喂给模型去训练&#xff0c…

2026/9/16 5:34:24

Tomcat实战指南:从安装部署、war包配置到JVM调优与HTTPS双向认证

还在调Tomcat?启动闪退、部署war包404、改配置改到怀疑人生……这些坑我基本都踩过一轮了。这篇文章把Tomcat从安装选型、IDE配置、war包部署,到server.xml核心参数、内存调优、常见故障排查,再到稍微进阶一点的双向HTTPS认证实验&#xff0c…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/16 0:04:09

PHP源码部署实战:从环境配置到运行情侣游戏全攻略

简介:这是一套面向情侣互动场景的PHP完整源码,集成情侣飞行棋、真心话大冒险、情趣骰子等玩法,并内置完整分销制度,可自定义多种返佣比例,源码完全开源无加密,支持微信无感自动授权登录与第三方授权&#x…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/15 21:31:11

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码