kotlin中JSON的使用及Android开发中json的使用
·
org.json的导入:
在build.gradle.kts的dependencies {}中加上
implementation("org.json:org.json:chargebee-1.0")
或者:
implementation 'org.json:org.json:chargebee-1.0'
具体添加方式和最新版本在Maven Central: org.json:org.json上看就行。
JSON保存.json文件
JSONObject
创建方式:
// 创建空JSONObject
val obj = JSONObject()
// 根据具体文本创建
val obj = JSONObject("""{"name": "张三", "age": 65}""")
保存方式:
val obj = JSONObject()
obj.put("name", "张三")
obj.put("age", 65)
val f = File("./data.json")
f.writeText(obj.toString()) //覆盖
读取方法:
// 根据具体文本创建
val obj = JSONObject("""{"name": "张三", "age": 65}""")
// 根据前项读取
val name = obj.getString("name") // 张三
val age = obj.getInt("age") // 65
JSONArray
创建方法与JSONObject相同,但是一次put的时候只能放一个参数,读取的时候根据.get(index: Int)获得,实例如下:
val arr = JSONArray()
arr.put("张三").put("李四").put("马五")
f.writeText(arr.toString())
for(i in 0 until arr.length()) {
arrList.add(arr.getString(i))
}
println(arr) // ["张三","李四","马五"]
println(arrList) // [张三, 李四, 马五]
当然,JSONArray中可以放JSONArray对象和JSONObject对象,(get()返回的是Any也差不多就是java得Object,需要自己强转类型,自己写个函数对应数据类其实也行),实例:
data class StudentData(val name: String, val age: Int)
fun getStudentDataFormJSON(json: String): StudentData {
val obj = JSONObject(json)
return StudentData(obj.getString("name"), obj.getInt("age"))
}
fun studentDataToJSON(data: StudentData): JSONObject{
val obj = JSONObject()
obj.put("name", data.name)
obj.put("age", data.age)
return obj
}
fun getData(file: File): MutableList<StudentData> {
val arr = JSONArray(file.readText())
val sdList = mutableListOf<StudentData>()
for (i in 0 until arr.length()) {
sdList.add(getStudentDataFormJSON(arr.get(i).toString()))
}
return sdList
}
fun main() {
val f = File("./data.json")
val arr = JSONArray()
arr.put(studentDataToJSON(StudentData("张三", 65)))
arr.put(studentDataToJSON(StudentData("李四", 25)))
arr.put(studentDataToJSON(StudentData("马五", 5)))
f.writeText(arr.toString())
val sdList = getData(f)
sdList.forEach { println(it.toString()) }
/* StudentData(name=张三, age=65)
StudentData(name=李四, age=25)
StudentData(name=马五, age=5)
*/
}
Android
Android自带org.json,因此不用导入,使用方式也和如上无差,只是在得到File对象时可以用
LocalContext.current.getExternalFilesDir(null) // 获得".../Android/data/你的包名"的File对象
val f = File(context.getExternalFilesDir(null), "data.txt")
差不多就是这样。
更多推荐


所有评论(0)