json是App进行网络通信最常见的数据交互格式,Android也自带了json格式的处理工具包org.json,该工具包主要提供了JSONObject(json对象)与JSONArray(json数组)的解析处理。下面分别介绍这两个工具类的用法:

1、JSONObject

JSONObject的常用方法如下所示:
构造函数 : 从指定字符串构造出一个JSONObject对象。
getJSONObject : 获取指定名称的JSONObject对象。
getString : 获取指定名称的字符串。
getInt : 获取指定名称的整型数。
getDouble : 获取指定名称的双精度数。
getBoolean : 获取指定名称的布尔数。
getJSONArray : 获取指定名称的JSONArray数组对象。
put : 添加一个JSONObject对象。
toString : 把当前JSONObject输出为一个json字符串。

2、JSONArray

JSONArray的常用方法如下所示:
length : 获取JSONArray数组对象的长度。
getJSONObject : 获取JSONArray数组对象在指定位置处的JSONObject对象。
put : 往JSONArray数组对象中添加一个JSONObject对象。

使用JSONObject和JSONArray对json串进行手工解析,处理过程比较常规,完成该功能的Kotlin代码与Java代码大同小异。下面直接给出Kotlin解析json串的常用代码片段,包括如何构造json串、如何解析json串,以及如何遍历json串:

    //构造json串private val jsonStr: Stringget() {val obj = JSONObject()obj.put("name", "地址信息")val array = JSONArray()for (i in 0..2) {val item = JSONObject()item.put("item", "第${i+1}个元素")array.put(item)}obj.put("list", array)obj.put("count", array.length())obj.put("desc", "这是测试串")return obj.toString()}//解析json串private fun parserJson(jsonStr: String?): String {val obj = JSONObject(jsonStr)var result = "name=${obj.getString("name")}\n" +"desc=${obj.getString("desc")}\n" +"count=${obj.getInt("count")}\n"val listArray = obj.getJSONArray("list")//util表示的范围是左闭右开区间。以下语句相当于for (i in 0..listArray.length() - 1)for (i in 0 until listArray.length()) {val item = listArray.getJSONObject(i)result = "${result}\titem=${item.getString("item")}\n"}return result}//遍历json串private fun traverseJson(jsonStr: String?): String {var result = ""val obj = JSONObject(jsonStr)val it = obj.keys()while (it.hasNext()) { // 遍历JSONObjectvar key = it.next().toString()result = "${result}key=$key, value=${obj.getString(key)}\n"}return result}

前面提到Kotlin对json串的手工解析没有什么好办法,其实是有更高层次的办法。手工解析json串实在是麻烦,费时费力还容易犯错,所以好汉不吃眼前亏,此路难走不如另寻捷径,捷径便是甩开手工解析几条街的自动解析。
既然是自动解析,首先要制定一个规则,约定json串有哪些元素,具体对应怎样的数据结构;其次还得有个自动解析的工具,俗话说得好,没有金刚钻、不揽瓷器活。对于捷径第一要素的json数据结构定义,Kotlin特有的数据类正好派上用场了,字段名、字段类型、字段默认值等色香味俱全,还有equals、copy、toString等下酒小菜,只要开发者轻拉珠帘便是一大桌的满汉全席。到底有多么省事,且看下面的用户信息数据类,包括姓名、年龄、身高体重、婚否等字段存取在内的完整功能,仅需一行Kotlin代码就全部搞定了:

data class UserInfo(var name: String="", var age: Int=0, var height: Long=0L, var weight: Float=0F, var married: Boolean=false)

接着解决捷径第二要素的工具使用,json解析除了系统自带的org.json,谷歌公司也提供了一个增强库gson,专门用于json串的自动解析。不过由于是第三方库,因此首先要修改模块的build.gradle文件,在里面的dependencies节点下添加下面一行配置,表示导入指定版本的gson库:

    compile "com.google.code.gson:gson:2.8.2"

其次还要在kt源码文件头部添加如下一行导入语句,表示后面会用到Gson工具类:

import com.google.gson.Gson

完成了以上两个步骤,然后就能在代码中调用Gson的各种处理方法了,Gson常用的方法有两个,一个名叫toJson,可把数据对象转换为json字符串;另一个名叫fromJson,可将json字符串自动解析为数据对象,方法调用的代码格式为“fromJson(json串, 数据类的类名::class.java)”。Kotlin的数据类定义代码尚且只有一行,这里的json串自动解析仍旧只需一行代码,实实在在为开发者节省了不少功夫。下面是个通过gson库实现json自动解析的Kotlin代码例子:

class JsonConvertActivity : AppCompatActivity() {private val user = UserInfo(name="阿四", age=25, height=160L, weight=45.0f, married=false)private val json = Gson().toJson(user)override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_json_convert)btn_origin_json.setOnClickListener { tv_json.text = "json串内容如下:\n$json" }btn_convert_json.setOnClickListener {//利用Gson包直接将json串解析为对应格式的数据类对象val newUser = Gson().fromJson(json, UserInfo::class.java)tv_json.text = "从json串解析而来的用户信息如下:" +"\n\t姓名=${newUser.name}" +"\n\t年龄=${newUser.age}" +"\n\t身高=${newUser.height}" +"\n\t体重=${newUser.weight}" +"\n\t婚否=${newUser.married}"}}
}

点此查看Kotlin入门教程的完整目录

__________________________________________________________________________
打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。

Kotlin入门(31)JSON字符串的解析相关推荐

  1. kotlin 读取json文件_Kotlin入门(31)JSON字符串的解析

    json是App进行网络通信最常见的数据交互格式,Android也自带了json格式的处理工具包org.json,该工具包主要提供了JSONObject(json对象)与JSONArray(json数 ...

  2. JavaScript学习(六十一)—json字符串的解析和JS 对象的序列化

    JavaScript学习(六十一)-json字符串的解析和JS 对象的序列化 一.json字符串的解析:parse方法 将json字符串转换为js对象,我们把这个过程称为json字符串的解析 格式:J ...

  3. JSON字符串的解析

    2019独角兽企业重金招聘Python工程师标准>>> JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的 ...

  4. C#中使用Newtonsoft.Json实现对Json字符串的解析

    场景 假如获取了Json字符串 {"angle": -0.0064,"confidence": 0.637,"x": 3.5069,&quo ...

  5. mysql解析json字符串_Mysql解析json字符串/数组

    1 Mysql解析json字符串 解决方法:JSON_EXTRACT(原字段,'$.json字段名') 执行SQL: SELECT JSON_EXTRACT( t.result,'$.row'), J ...

  6. php在html中无法解析json数据,json字符串无法解析的问题

    就是我做了一个PHP接口,返回的数据是json格式(数据格式没问题,且编码是utf8格式):但调用时无法解析这个json格式的数据,但我把返回的数据复制成字符串,就可以解析了.找了半天,发现在输出的源 ...

  7. Java JSON字符串格式解析,数组取值

    //使用的是阿里的 fastjson 包 <dependency><groupId>com.alibaba</groupId><artifactId>f ...

  8. Kotlin入门教程——目录索引

    Kotlin是谷歌官方认可的Android开发语言,即将发布的Android Studio 3.0版本也会开始内置Kotlin,所以未来在App开发中Kotlin取代Java是大势所趋,就像当初And ...

  9. jsp java json解析,jsp中获取json字符串,并解析

    JqueryDemo1 function showData() { var str='{ "name": "John" }';//json标准格式 var ob ...

最新文章

  1. gridContro使用随记
  2. javascript 异步实现方案
  3. ZeroMQ接口函数之 :zmq_strerror - 获取ZMQ错误描述字符串
  4. shell实例第16讲:猜拳游戏
  5. xvid 数据编码和解码
  6. NoPause/NoEmgAbort的任务 与后台任务的区别
  7. MFCC特征提取过程详解
  8. myan回复几个问题
  9. 学python能赚钱吗-自学Python三个月能赚钱吗?
  10. 史上最全Java集合关系图
  11. 1265=马拦过河卒
  12. 如何配置风骚的android studio编辑器,让编程更优雅?
  13. 无人机协同搜索matlab,一种多无人机协同目标搜索方法与流程
  14. 用户与计算机的交互界面是什么,终于知道交互界面设计是什么
  15. Redis数据结构(一)SDS
  16. vivado中实现VGA驱动学习笔记
  17. lgv50进入工程模式_LG手机工程模式进入方法及菜单常用指令
  18. ZZULIOJ-1035,分段函数求值(Python)
  19. 你的知识需要管理PKM
  20. 图像传感器的这9个知识点,你都懂吗?

热门文章

  1. Leetcode每日一题:143.reorder-list(重排列表)
  2. 面试题——C++/C
  3. 控制工程基础Chapter1 Introduction to Control Systems
  4. Representation Flow for Action Recognition论文解读
  5. 【七】jmeter 连接 mysql 数据库(Jmeter 连接数据池)配置:JDBC Connection Configuration
  6. 中波形过于密集_论高速公路波形护栏板外观设计的重要性
  7. gdb java,调用gdb来调试java程序
  8. [Ext JS]5.8 Group Grid-分组网格
  9. Java事务管理之JDBC
  10. Perl 安装及模组安装方法【windows】