android json 解析 kotlin
前面 写了一次 kotlin解析json 但是,真的写得太烂,直接删掉了,现在重新整理一下。顺便记录一下今天坑了我很久的小问题。
1.首先从最简单的入手吧
一个json的字符串:=====就叫做jsonString吧
{
"code": "200",
"msg": "success",
"debugMsg": "",
"result": {
"data": "1231414"
}
}
好了怎么解析呢???
用一个函数即可
fun get_key_string(key:String,jsonString:String):String {
var str: String = ""
try {
val jsonObj:JSONObject= JSONObject(jsonString)
str=jsonObj.getString(key)
} catch (e: JSONException) {
e.printStackTrace()
}
return str
}
怎么用呢???
val msg=get_key_string("msg","jsonString")
第一个参数=====在json字符串中,你想要解析的key,我上面的例子有 code,msg,debugMsg,result,我选择的是msg
第二个参数=====就是json字符串的名称,就是一个字符串,不要想得太复杂了
msg解析后的结果=====success
2.多重解析
依旧是上面的例子吧=====json字符串名字依旧叫做jsonString
{
"code": "200",
"msg": "success",
"debugMsg": "",
"result": {
"data": "1231414"
}
}
我想要得到data怎么办呢???
很简单,两步即可。
val result=get_key_String("result","jsonString")//=====这里的第二个参数依旧是jsonString
val data=get_key_String("data","result")//=====注意这里的第二个参数已经变成了result了
3.解析整型,boolean类型
这个和解析String类型类似,直接上代码吧
fun get_key_boolean(key:String,jsonString:String):Boolean {//解析成Boolean
var str: Boolean =true
try {
val jsonObj:JSONObject= JSONObject(jsonString)
str=jsonObj.getBoolean(key)
} catch (e: JSONException) {
e.printStackTrace()
}
return str
}
fun get_key_int(key:String,jsonString:String):Int {//解析成Int
var str: Int=0
try {
val jsonObj:JSONObject= JSONObject(jsonString)
str=jsonObj.getInt(key)
} catch (e: JSONException) {
e.printStackTrace()
}
return str
}
4.稍微牛逼一点的解析=====解析成List<Map<String,Any>>=====其实这个就比较通用了,很多东西直接用这个就可以了
比如来一个复杂一点的jsonString吧
{
"code": "200",
"msg": "success",
"debugMsg": "",
"result": {
"data": [
"key1": "string"
"key2": 123
"key3": true
]
}
}
这样一个jsonString,key1对应一个字符串,key2对应一个整型,key3对应一个布尔类型
怎么解析呢???
fun getListMap(key: String, jsonString: String): List<Map<String, Any>> {
val list = ArrayList<Map<String, Any>>()
try {
val jsonObject = JSONObject(jsonString)
val jsonArray = jsonObject.getJSONArray(key)
for (i in 0..jsonArray.length() - 1) {
val jsonObject2 = jsonArray.getJSONObject(i)
val map = HashMap<String, Any>()
val iterator = jsonObject2.keys()
while (iterator.hasNext()) {
val json_key = iterator.next()
var json_value: Any? = jsonObject2.get(json_key)
if (json_value == null) {
json_value = ""
}
map.put(json_key, json_value)
}
list.add(map)
}
} catch (e: JSONException) {
e.printStackTrace()
}
return list
}
主要有2个步骤
val result=get_key_string("result","jsonString")
val data=getListMap("data","result")
就这么666
5.将所有的可以用到的方法封装起来吧
class JsonUtil {
companion object {
fun get_key_string(key:String,jsonString:String):String {
var str: String = ""
try {
val jsonObj:JSONObject= JSONObject(jsonString)
str=jsonObj.getString(key)
} catch (e: JSONException) {
e.printStackTrace()
}
return str
}
fun get_key_boolean(key:String,jsonString:String):Boolean {
var str: Boolean =true
try {
val jsonObj:JSONObject= JSONObject(jsonString)
str=jsonObj.getBoolean(key)
} catch (e: JSONException) {
e.printStackTrace()
}
return str
}
fun get_key_int(key:String,jsonString:String):Int {
var str: Int=0
try {
val jsonObj:JSONObject= JSONObject(jsonString)
str=jsonObj.getInt(key)
} catch (e: JSONException) {
e.printStackTrace()
}
return str
}
fun getList(key: String, jsonString: String): List<String> {
val list = ArrayList<String>()
try {
val jsonObject = JSONObject(jsonString)
val jsonArray = jsonObject.getJSONArray(key)
for (i in 0..jsonArray.length() - 1) {
val msg = jsonArray.getString(i)
list.add(msg)
}
} catch (e: JSONException) {
e.printStackTrace()
}
return list
}
fun getListMap(key: String, jsonString: String): List<Map<String, Any>> {
val list = ArrayList<Map<String, Any>>()
try {
val jsonObject = JSONObject(jsonString)
val jsonArray = jsonObject.getJSONArray(key)
for (i in 0..jsonArray.length() - 1) {
val jsonObject2 = jsonArray.getJSONObject(i)
val map = HashMap<String, Any>()
val iterator = jsonObject2.keys()
while (iterator.hasNext()) {
val json_key = iterator.next()
var json_value: Any? = jsonObject2.get(json_key)
if (json_value == null) {
json_value = ""
}
map.put(json_key, json_value)
}
list.add(map)
}
} catch (e: JSONException) {
e.printStackTrace()
}
return list
}
fun get_ask_Item(key:String,jsonString:String): ArrayList<MyAsk>? {
var myAsk=ArrayList<MyAsk>()
try{
val jsonObject=JSONObject(jsonString)
val jsonArray=jsonObject.getJSONArray(key)
for(i in 0..jsonArray.length()-1){
val json_ask=jsonArray.getJSONObject(i)
var my_ask=MyAsk()
val commentCount=json_ask.getString("commentCount")
val commentID=json_ask.getString("commentID")
val content=json_ask.getString("content")
val createTime=json_ask.getString("createTime")
val gender=json_ask.getString("gender")
val icon=json_ask.getString("icon")
val id=json_ask.getString("id")
val isFavorite=json_ask.getString("isFavorite")
val isZan=json_ask.getString("isZan")
val label=json_ask.getString("label")
val link=json_ask.getString("link")
val nickname=json_ask.getString("nickname")
val publisherID=json_ask.getString("publisherID")
val reward=json_ask.getString("reward")
val type=json_ask.getString("type")
val zan=json_ask.getString("zan")
val image_array=json_ask.getJSONArray("image")
var image_list:ArrayList<String>?=null
for(j1 in 0..image_array.length()-1){
val image_item=image_array.getString(j1)
image_list?.add(image_item)
}
val thumbnailImage_array=json_ask.getJSONArray("thumbnailImage")
var image_list2:ArrayList<String>?=null
for(j2 in 0..thumbnailImage_array.length()-1){
val image_item=thumbnailImage_array.getString(j2)
image_list2?.add(image_item)
}
my_ask.commentID=commentID
my_ask.commentCount=commentCount
my_ask.content=content
my_ask.createTime=createTime
my_ask.gender=gender
my_ask.icon=icon
my_ask.id=id
my_ask.favoriteIs=isFavorite
my_ask.zan=zan
my_ask.zanIs=isZan
my_ask.label=label
my_ask.link=link
my_ask.nickname=nickname
my_ask.publisherID=publisherID
my_ask.reward=reward
my_ask.type=type
my_ask.image=image_list
my_ask.thumbnailImage=image_list2
myAsk?.add(my_ask)
}
return myAsk
}catch (e:JSONException){
e.printStackTrace()
}
return myAsk
}
}
}
最后一种是自定义式解析,因为项目中的jsonString可以非常复杂,所以要自己定义一个类,然后用类似的方法来解析即可。
因为我博客名也叫做Jason_Jan对于json还是比较情有独钟的,可以说json真的很棒
推荐两个第三方库
Ason=====github链接:https://github.com/afollestad/ason
GsonFormat=====github链接:https://github.com/zzz40500/GsonFormat
android json 解析 kotlin的更多相关文章
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- android json 解析简单实例
Android JSON解析跟JAVA 的JSON解析原理是一样的. Android自带的JSON方式跟方便,不需要导包啥的.不深究原理了,直接上代码: public class JsonActivi ...
- android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】
android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...
- Android JSON 解析关键代码
Android Json 解析其实还是蛮重要的知识点,为什么这么说呢,因为安卓通信大部分的协议都是使用 json 的方式传输,我知道以前大部分是使用的 xml ,但是时代在发展社会在进步,json 成 ...
- Android Json解析与总结
一.JSON定义 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...
- android json解析及简单例子
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- Android JSON 解析库的使用 - Gson 和 fast-json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...
- android Json解析详解
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数 ...
- android Json解析详解(详细代码)
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
随机推荐
- JAVA中面向对象
一.方法: 1.方法概述: 在JAVA中,方法就是用来完成解决某件事情或实现某个功能的办法. 2.方法的语法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,.....){ ...
- bootstrapTable的数据后端分页排序
数据后端分页排序,其实就是sql语句中oeder by做一些限制. 之前在写sql语句中的order by是写死,既然要写活,就要传参数到后台. 之前讲到bootstrapTable的queryPar ...
- Django的路由层和视图层
一丶Django 的路由层(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django ...
- vuejs 生命周期 updated
前段时间 公司领导提示出了一个需求就是 像微信朋友圈一样,刷列表 一直刷到 底部或者是半中央,然后点击返回或者是离开一下 页面,再辞进入朋友圈页面依然现实的还是之前滚动的位置. 我现在做的公司贷后系统 ...
- Android 在已有工程中实现微信图片压缩
这个我们需要自己去编译,但是已经有人帮我们编译好了,压缩算法也已经实现,因此,我们去下载然后编译即可:https://github.com/bither/bither-android-lib 首先将上 ...
- 《Python高效开发实战》实战演练——基本视图3
在完成Django项目和应用的建立后,即可以开始编写网站应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能. 1)首先在djangosite/app/views.py中建立 ...
- 利用jsplumb和碰撞检测自动生成流程图
使用jsplumb构建流程图模型时,有一个需求要求,选项可以从选项表中拖拽到指定容器,并且两个选项要接触到的时候才能连接起来,不接触不能连接.效果图如下 略丑- 因为这里用到了拖拽,拖放功能,所以用到 ...
- java Vamei快速教程04 封装和接口
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...
- linux 命令——24 Linux文件类型与扩展名
Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...
- 自行解决12306页面显示异常的问题(长城宽带下WWW。12306无法正常使用)
前二天突然发现家里所用的长城宽带的www.12306.cn无法正常显示,点击余票查询或者车票预订均打不开,加载时间非常长,现象好似CSS等资源文件未载入成功(如图所示)更换chrome.firefox ...