此项目是一款基于Android原生org.json的扩展库,借助kotlin语言特性,使Android端的json解析和操作更加便捷。
在项目 build.gradle 中修改 repositories
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在app build.gradle 中添加 dependency
dependencies {
implementation 'com.gitee.LoeZhang:json_ext:0.1.9'
}
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("甲", "乙", "丙")
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==
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)
转化留值: json转kotlin对象后再由kotlin对象转json,通常无法保留json中的冗余字段,所以本库预留rootJson字段用来存储原始json,以保证数据的完整性。 只需在Bean中加入rootJson字段即可。
@Keep
class People
{
private var rootJson: JSONObject? = null
var name: String = ""
var age = 0
var sex = true
}
转化处理:
如果需要对toBean数据进行特殊处理,可以实现init(data: JSONObject)
方法,同样,如果需要对toJson数据进行处理,可以实现out(data: JSONObject): JSONObject
方法。
@Keep
class People
{
var time: XTime? = null
private fun init(data: JSONObject)
{
time = XTime(data.gotString("time"))
}
private fun out(data: JSONObject): JSONObject
{
data.put("time", time?.formatStaticDate())
return data
}
}
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")
}
js.map("name")
过滤操作:filter()
js.filter<JSONObject>()
{
it.gotInt("age") < 30
}
连接操作:joinToString()
js.joinToString<JSONObject>()
{
it.gotString("name")
}
js.map("name").joinToString("-")
叠加操作:plus()
使用了kotlin运算符重载
json1.plus(json2)
json1 + json2
json1 += json2
val json = json1 + json2 + json3
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。