项目中有时候仅仅需要一个或者多个字段时可以使用这种解析方式,省去创建实体类。

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手动解析详解的更多相关文章

  1. Loadrunner手动关联详解

    Loadrunner手动关联详解 一.关联的含义: 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到 ...

  2. IA-32指令解析详解

    IA-32指令解析详解 0x00 前言 这段时间忙于考试,信息论和最优化,还有算法分析,有点让人头大.期间花了几天看SEH机制,能明白个大概,但是对于VC++对于SHE的包装似乎还是不是很明白,发现逆 ...

  3. jmeter之json提取器详解

    Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...

  4. android Json解析详解

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数 ...

  5. android Json解析详解(详细代码)

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  6. jquery json解析详解

    我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: 1 {"comments":[ ...

  7. Spring IoC componet-scan 节点解析详解

    前言 我们在了解 Spring 容器的扩展功能 (ApplicationContext) 之前,先介绍下 context:componet-scan 标签的解析过程,其作用很大是注解能生效的关键所在. ...

  8. 小程序2-基本架构讲解(一)JSON配置与详解

    项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件 JSON 配 ...

  9. GET/POST请求的使用《极客学院 --AFNetworking 2.x 网络解析详解--2》学习笔记

    AFNetworking是开源代码排名第一的开源库.  GET请求的请求正文 一般都是明文显示的,携带的数据量小. POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只 ...

随机推荐

  1. Android四大组件之服务

    创建一个服务,并与活动绑定 作为安卓四大组件之一的服务,毫无例外也要在manifast中进行注册 新建服务类继承于Service,并覆盖onBind( )方法,用于与活动绑定 public class ...

  2. MySQL基础3-SQL语言

    1.DQL语句分类 重点在于Select语句 2.Sql语句的书写规则 3.怎样使用Navicat导入已经写好的sql文件 (1)在Navicat中右击选中的数据库 (2)将sql文件所在的路径添加进 ...

  3. DEDE调用指定文章ID来调用特定文档

    http://www.jb51.net/cms/137423.html 代码如下: {dede:arclist row=1 idlist='6'} <li><a href=" ...

  4. 使用 Pinup,PinupManager 在 XNA 中创建贴图(十七)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  5. CSU-ACM寒假集训选拔-入门题

    CSU-ACM寒假集训选拔-入门题 仅选择部分有价值的题 J(2165): 时间旅行 Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中 ...

  6. mojoportal在IE10中点击ImageButton出错的处理方法

    在ie10中,如果点击了mojoportal中的imagebutton,会出现错误,在ie10之前的浏览器,及ie10的兼容模式中及谷歌浏览器中都不会出现. 日志中 错误信息如下: 2013-09-2 ...

  7. idea项目多模项目的搭建(复制)

    本文通过一个例子来介绍利用maven来构建一个多模块的jave项目.开发工具:intellij idea. 一.项目结构 multi-module-PRoject是主工程,里面包含两个模块(Modul ...

  8. Nginx概述与安装

    什么是Nginx 一款服务器软件,类似于Apache.Tomcat Nginx还是一款HTTP和反向代理服务器,同时也是一个代理邮件服务器.除了实现网站发布的功能外,还可以提供负载均衡. 所谓负载均衡 ...

  9. 【SPOJ1297】Palindrome (SA+RMQ)

    求最长回文串.把原串翻转后,加在原串后面,中间插入一个辨别字符.然后求SA,Height.然后枚举每个字母作为回文串中心,分长度为奇数和偶数去讨论:奇数求 suffix(i)和suffix(n-i+1 ...

  10. 【小技巧】树剖套线段树优化建图如何做到 O(nlogn)

    前提:用树剖套线段树优化树链连边.例题:bzoj4699 我们说树剖的时间复杂度是 $O(n\times log(n))$,是因为访问一条链时需要经过 $log(n)$ 级别条重链,对于每条重链还需要 ...