json手动解析详解
项目中有时候仅仅需要一个或者多个字段时可以使用这种解析方式,省去创建实体类。
1.首先讲解下最基本的数据格式。
例如: String json="{'name':'小明','action':'音乐'}";
首先我们把字符串转化为json对象,其次根据字段名称拿到本类型的数据(最好做下非空判断)
例如:if(ject.has"name"){
不管是对象、集合都可用。如果不判断会报空,程序崩溃。
}
下面是示例代码
- public void json1(){
- String json="{'name':'小明','action':'音乐'}";
- try {
- JSONObject ject=new JSONObject(json);
- String name=ject.optString("name");
- String action=ject.optString("action");
- Log.i("result","name:"+name+"action:"+action);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
2.其次讲解下集合类型的json
String json="[{'no':11},{'no':22},{'no':33}]";
一样的需要转换json对象这里就不赘述了
这里不一样的是需要用循环取出每一项,所以我们得到的每一个对象就要用jsonarray来接收,
每个array中有一个对象,就需要把每一个子项转换成jsonobject。(这里是取int类型的值)
所以用方法一来取出我们需要的项(这里最好也要非空判断)。
- public void json2(){
- String json="[{'no':11},{'no':22},{'no':33}]";
- try {
- JSONArray jaay=new JSONArray(json);//定义json数组解析对象
- for(int i=0;i<jaay.length();i++){
- JSONObject ject=jaay.optJSONObject(i);//解析数组中的单个对象
- int no=ject.getInt("no");//获取对象的键
- }
- Log.i("aaa","---"+sb.toString());//打印
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
3.复杂的json。
String json="{'plist':[{'no':1001,'name':'科比','age':20},{'no':1002,'name':'张杰','age':22},{'no':1003,'name':'张磊','age':25}]}";
这个包含对象和数组。
首先分析数租在plist下所以拿到plist对象,循环拿到数组
在分别拿到每一项里面的数据。
- public void json3(){
- //获取JSON
- String json="{'plist':[{'no':1001,'name':'科比','age':20},{'no':1002,'name':'张杰','age':22},{'no':1003,'name':'张磊','age':25}]}";
- try {
- JSONObject object=new JSONObject(json);//JSON对象解析
- JSONArray array=object.optJSONArray("plist");//JSON数组解析 把集合放在数组中
- for(int i=0;i<array.length();i++){//循环迭代数组中的某一项,
- Map<String,Object> map=new HashMap<String, Object>();//定义MAP集合
- JSONObject object1=array.optJSONObject(i);//将数组中的值赋值给对象
- int no=object1.optInt("no");//得到对象的no键值
- String name=object1.optString("name");//得到对象的name键值
- int age=object1.optInt("age");//得到对象的age键值
- //放入集合
- map.put("no",no);
- map.put("name",name);
- map.put("age",age);
- list.add(map);//放入list集合
- }
- for (Map<String,Object> m:list){//循环迭代打印MAP集合中的键值
- Log.i("ooooo","no:"+m.get("no")+",name:"+m.get("name")+",age:"+m.get("age"));
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
总结:
手动解析其实理解之后很简单,注意的就是数组和对象必须区分。一层层往下解析,该方法适用于取少量字段。大量的数据解析会很麻烦(建议用第三方)
by:磊磊tua
json手动解析详解的更多相关文章
- Loadrunner手动关联详解
Loadrunner手动关联详解 一.关联的含义: 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到 ...
- IA-32指令解析详解
IA-32指令解析详解 0x00 前言 这段时间忙于考试,信息论和最优化,还有算法分析,有点让人头大.期间花了几天看SEH机制,能明白个大概,但是对于VC++对于SHE的包装似乎还是不是很明白,发现逆 ...
- jmeter之json提取器详解
Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...
- android Json解析详解
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数 ...
- android Json解析详解(详细代码)
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- jquery json解析详解
我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: 1 {"comments":[ ...
- Spring IoC componet-scan 节点解析详解
前言 我们在了解 Spring 容器的扩展功能 (ApplicationContext) 之前,先介绍下 context:componet-scan 标签的解析过程,其作用很大是注解能生效的关键所在. ...
- 小程序2-基本架构讲解(一)JSON配置与详解
项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件 JSON 配 ...
- GET/POST请求的使用《极客学院 --AFNetworking 2.x 网络解析详解--2》学习笔记
AFNetworking是开源代码排名第一的开源库. GET请求的请求正文 一般都是明文显示的,携带的数据量小. POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只 ...
随机推荐
- Gender Equality in the Workplace【职场上的性别平等】
Gender Equality in the Workplace A new batch of young women - members of the so-called Millennial ge ...
- Eclipse快速输出System.out.println();
借鉴网上大佬博客 刚开始还好好敲代码 后来看博客发现其实输入syso或sysout 再按alt+/就OK 开始学JAVA,好好干.
- mysql-不恰当的update语句使用主键和索引导致mysql死锁
背景知识:MySQL有三种锁的级别:页级.表级.行级. MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):BDB存储引擎采用的是页面锁(page-level ...
- tensorboard页面显示No dashboards are active for current data set 问题win10系统
如果问题如上所示,可以试下如下方法: 在文件夹中找到你的logs文件, 在空白处按住“shift”键,右键鼠标(注意鼠标不要选中任何文件),点击“Powershell”打开win10powershel ...
- Hive官方文档
Hive官方文档 内容列表 Cloudera制作的Hive介绍视频 安装与配置 系统需求 安装Hive发行版 从Hive源码编译 运行Hive 配置管理概览 运行时配置 Hive, Map-R ...
- C语言其他知识总结
1.常指针与指针常量 诀窍:观察const修饰的是谁,那谁就不可更改. const int *p;//const 修饰*p,所以*p不能更改.通过指针不可更改指向的值 int const *p;//同 ...
- 最简单的RSA及其几个网站和工具
最简单的形式 给你公钥和一个密文. flag.enc就是密文,我们用记事本是看不出什么的,其实也不用看,因为后边的解密是直接用脚本读取文件的,只需要知道这是密文. pub.pem就是公钥,用记事本打开 ...
- 【LeetCode】移除元素(Remove Element)
这道题是LeetCode里的第27道题. 题目描述: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原 ...
- jsp中/el表达式中将后台传来的时间戳格式化为年月日时分秒
sp中/el表达式中将后台传来的时间戳格式化为年月日时分秒1.引入相关标签库 <%@taglib prefix="c" uri="http://java.sun.c ...
- TOJ 4689: Sawtooth
4689: Sawtooth Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 26 ...