介绍
此项目是一款基于Android原生org.json的扩展库,借助kotlin语言特性,使Android端的json解析和操作更加便捷。
特点
-
轻量
json_ext只是对现有json库的封装,不必额外引入其他庞大的json库,减少代码体积。 -
简洁
使用简短单词封装操作,可轻松创建、存取json对象,也可轻易使json对象与Java/kotlin对象之间相互转化,简单易学。 -
功能强大
可一句实现json对象与Java/kotlin对象的互转,支持注解别名,支持解析多重list与对象相互嵌套的数据。 -
健壮稳定
json_ext最大的特点是存取数据的稳定,开创特有got语法,可以智能转化取出的数据,有效杜绝数据获取过程中整体或局部异常导致的崩溃。
使用方法
在项目 build.gradle 中修改 repositories
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在app build.gradle 中添加 dependency
dependencies {
implementation 'com.gitee.LoeZhang:json_ext:0.1.3'
}
使用说明
1. 创建
Json()
:创建空json对象。
Json(jsonString: String? = null)
:创建以字符串作为数据源的json对象。
示例:Json("{'名称':'顺哥哥','age':26,'sex':true,'资金':123.56}")
Json(key: String, value: Any)
:创建包含一个键值对的json对象。
示例:Json("name","顺哥哥")
JsonArray()
:创建空jsonArray数组。
JsonArray(jsString: String? = null)
:创建以字符串作为数据源的jsonArray数组。
示例:JsonArray("['甲','乙','丙']")
jsOf(vararg elements: T)
:模仿kotlin的listOf()快速创建jsonArray数组。
示例:jsOf("甲", "乙", "丙")
2. 存取
json对象存取可以直接使用org.json自带的getXxx、putXxx。如需要安全取出数据,则需使用got语法。
gotString(key: String, default: String = "")
:将属性以字符串形式取出,自动剔除null,可设置默认值。
gotInt(key: String, default: Int = 0)
:将属性以整数形式取出,可兼容浮点型、长整型。
==另有其他类型的got操作与String、Int类似,都自带可变的默认值,且会智能强转属性,强转失败会自动设置默认值,不会导致崩溃。可用idea代码提示查看更多got操作。==
jsonArray数组的存取也可使用get、put和got,got语法与json对象一样安全。
==注意:如果gotJson()和gotArray()取不到数据,会以字符串形式进行取值,然后自动强转为json对象或jsonArray数组,这样可以兼容字符串形式的对象属性。 #F44336==
3. 转化
Bean可用@JsonName
注解改变属性key值,支持属性值为null,示例kotlin对象:
@Keep
class People
{
@JsonName("名称")
var name: String = ""
var age = 0
var sex = true
@JsonName("资金")
var money: Double? = null
var childList: List<Child>? = null
}
kotlin对象转json对象:People().toJson()
json对象转kotlin对象: json.toBean<People>()
或者 json.toBean(People::class.java)
或者 json.toBean(people)
kotlin列表转jsonArray:listOf("甲", "乙", "丙").toJsonArray()
jsonArray转kotlin列表:js.toList<People>()
或者 js.toList(People::class.java)
4. 操作符
json_ext提供了一些列表操作符,让你可以像操作list一样操作jsonArray。
遍历操作:forEach()
、forEachIndex()
、forEachReverse()
、forEachIndexReverse()
js.forEach<JSONObject>()
{
it.put("age", 25)
}
转换操作:map()
、map(name: String)
、mapNotNull()
js.map<JSONObject>()
{
it.gotString("name")
}
过滤操作:filter()
js.filter<JSONObject>()
{
it.gotInt("age ") < 30
}
贡献者
- LoeZhang