我需要将字符串{\"name\":\"test name\", \"age\":25}
转换为JSONObject
也许我误解了问题,但听起来你已经在使用org.json,这就引发了一个问题,为什么要这样做
val answer = JSONObject("""{"name":"test name", "age":25}""")
这不是最好的方法吗?JSONObject内置功能有什么问题吗?
org.json:json:20200518
,你会发现 JSONObject 中没有使用字符串对象作为参数的构造函数。 - Alexandre V.val rootObject= JSONObject()
rootObject.put("name","test name")
rootObject.put("age","25")
你可以使用https://github.com/cbeust/klaxon 库。
val parser: Parser = Parser()
val stringBuilder: StringBuilder = StringBuilder("{\"name\":\"Cedric Beust\", \"age\":23}")
val json: JsonObject = parser.parse(stringBuilder) as JsonObject
println("Name : ${json.string("name")}, Age : ${json.int("age")}")
结果:
Name : Cedric Beust, Age : 23
JsonObject
知道如何将自身序列化回Json。 - Andrew KovalenkoParser()
已被弃用,请使用Parser.default()
代替。 - Mugenclass JsonBuilder() {
private var json = JSONObject()
constructor(vararg pairs: Pair<String, *>) : this() {
add(*pairs)
}
fun add(vararg pairs: Pair<String, *>) {
for ((key, value) in pairs) {
when (value) {
is Boolean -> json.put(key, value)
is Number -> add(key, value)
is String -> json.put(key, value)
is JsonBuilder -> json.put(key, value.json)
is Array<*> -> add(key, value)
is JSONObject -> json.put(key, value)
is JSONArray -> json.put(key, value)
else -> json.put(key, null) // Or whatever, on illegal input
}
}
}
fun add(key: String, value: Number): JsonBuilder {
when (value) {
is Int -> json.put(key, value)
is Long -> json.put(key, value)
is Float -> json.put(key, value)
is Double -> json.put(key, value)
else -> {} // Do what you do on error
}
return this
}
fun <T> add(key: String, items: Array<T>): JsonBuilder {
val jsonArray = JSONArray()
items.forEach {
when (it) {
is String,is Long,is Int, is Boolean -> jsonArray.put(it)
is JsonBuilder -> jsonArray.put(it.json)
else -> try {jsonArray.put(it)} catch (ignored:Exception) {/*handle the error*/}
}
}
json.put(key, jsonArray)
return this
}
override fun toString() = json.toString()
}
很抱歉,我可能不得不削减一些本来是我的代码中独特的类型,所以我可能会破坏一些东西——但是这个想法应该很清楚。
你可能已经知道,在 Kotlin 中,“to” 是一个中缀方法,可以将两个对象转换为 Pair。因此,你可以像这样简单地使用它:
JsonBuilder(
"name" to "Amy Winehouse",
"age" to 27
).toString()
但你可以做更可爱的事情:
JsonBuilder(
"name" to "Elvis Presley",
"furtherDetails" to JsonBuilder(
"GreatestHits" to arrayOf("Surrender", "Jailhouse rock"),
"Genre" to "Rock",
"Died" to 1977)
).toString()