java中jsonl解析_json手动解析详解

本文介绍了几种常见的JSON解析方法,包括简单的键值对解析、数组解析及复杂结构解析,并提供了详细的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

Map map=new HashMap();//定义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 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

Loadrunner手动关联详解

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

IA-32指令解析详解

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

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请求可以携带更多的参数,只 ...

java中Array/List/Map/Object与Json互相转换详解(转载)

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

随机推荐

Mosquitto pub/sub服务实现代码浅析-主体框架

Mosquitto 是一个IBM 开源pub/sub订阅发布协议 MQTT 的一个单机版实现(目前也只有单机版),MQTT主打轻便,比较适用于移动设备等上面,花费流量少,解析代价低.相对于XMPP等来 ...

ESP8266刷AT固件与nodemcu固件

这回是使用的这一款 因为这款默认的是支持AT指令的固件,,所以我们就刷nodemcu的 先看接线 GPIO0 默认是工作模式(不接线).如果接了低电平就是下载模式(给模块刷固件!!)所以接低电平.CH ...

windows客户机连接gerrit的一个报错处理

gerrit环境部署在linux服务器,windos客户机连接gerrit进行代码操作: 在windows客户机下载Git客户端 在“Git Bash”里使用 ”ssh-keygen -t rsa - ...

Centos下设置静态IP

使用VirtualBox装了很多虚拟机,默认采用的DHCP的方式,但是随着虚拟机越来越多以后,这种方式很不方便,所以需要将机器的IP都设置为静态IP 需要添加的几项内容的解释:IPADDR    IP ...

javascript实现数据结构与算法系列:循环链表与双向链表

循环链表(circular linked list) 是另一种形式的链式存储结构.它的特点是表中最后一个结点的指针域指向头结点,整个表形成一个环. 循环链表的操作和线性链表基本一致,仅有细微差别. w ...

如何“任性”使用Android的drawText()

Android的canvas上可以画很多基本形状,诸如:圆,矩形,线条等等,其中当属文字即drawText()较难理解和使用(额,这只是就个人感受),下面将慢慢介绍下如何简单使用drawText(). ...

a标签的 target 使用

...

stm32串口接收中断协议解析

借鉴了文章: 文章地址:http://blog.youkuaiyun.com/kevinhg/article/details/40186169 串口的配置这里不做 ...

repr调试python程序

一般调试程序的时候都比较倾向print,利用直接打印的方法作出判断,但是print只能打印出结果,对类型无法作出判断.例如: a = 5 b = ' print(a) print(b) 结果为: 5 ...

在个人博客中优雅的使用Gitalk评论插件

在上一篇博客中,我们了解了如何快速的从0到1搭建一个个人博客. 其实细心的你会发现,该博客用到了一个评论插件,这个插件就是Gitalk. 如果想要在 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值