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请求可以携带更多的参数,只 ...
随机推荐
- g++编译器的使用(转载)
关于g++ g++ 是GNU组织开发出的编译器软件集合(GCC)下的一个C++编译器.它是Unix 和 Linux 系统下标配的 基于命令行的 C++编译器.如果你的系统是Windows,可以按照 ...
- oracle 11g 版本自带移除,省时省力
---oracle删除 app\Administrator\product\11.2.0\dbhome_1\deinstall.bat 指定要取消配置的所有单实例监听程序 [LISTENER]: En ...
- 4 Template层-CSRF
1.csrf 全称Cross Site Request Forgery,跨站请求伪造 某些恶意网站上包含链接.表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站 ...
- Django基于Pycharm开发之三[LANGUAGE_CODE与TIME_ZONE]
在django/conf/global_settings.py 中,我们可以找到关于language和timezone的通用配置信息,源码如下: # Local time zone for this ...
- 在Foxmail中添加阿里云企业邮箱账号
1.安装完成Foxmail之后,新建账号 输入阿里云邮箱地址和密码,点击创建 接受服务器类型你可以选择POP3或者IMAP,在这里我选择的是POP3 点击创建,大功告成. 为什么要写这篇文章呢? 因为 ...
- session为什么需要持久化
为什么需要持久化: 客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间.如果在某一时间段内 ...
- luogu3375 【模板】KMP字符串匹配
nxt数组下标从1开始而a,b数组下标从0开始. #include <iostream> #include <cstring> #include <cstdio> ...
- Three Steps to Migrate Group Policy Between Active Directory Domains or Forests Using PowerShell
Three Steps Ahead Have you ever wished that you had three legs? Imagine how much faster you could ru ...
- 50、转自知乎上android开发相见恨晚的接口
原文链接:http://www.zhihu.com/question/33636939 程序员软件开发Android 开发JavaAndroid修改 Android开发中,有哪些让你觉得相 ...
- c语言入门-02-第一个c程序开始
我们来开我们第一个c代码 #include<stdio.h> int main(){ // print num int num; num = 1; printf("%d\n&qu ...