如何在Kotlin中从String创建JSONObject?

nku*_*day 30 json kotlin

我需要将字符串转换{\"name\":\"test name\", \"age\":25}为JSONObject

Ryb*_*yba 19

也许我误解了这个问题,但听起来你已经在使用org.json这引出了一个问题,为什么

val answer = JSONObject("""{"name":"test name", "age":25}""")
Run Code Online (Sandbox Code Playgroud)

不是最好的方法吗?JSONObject的内置功能有什么问题?

  • 您是否使用 Kotlin 测试了您的示例?如果是,您使用的是哪个版本的库?如果您尝试使用 JSONObject 版本“org.json:json:20200518”,您会发现带有 String 对象的构造函数在 JSONObject 中不可用。 (2认同)

arj*_*tha 18

val rootObject= JSONObject()
rootObject.put("name","test name")
rootObject.put("age","25")
Run Code Online (Sandbox Code Playgroud)

  • 这个答案怎么得到这么多点赞!?它没有回答问题。输入数据应该是 JSON 字符串,此示例演示如何逐个字段构建新的 JSONObject。 (3认同)
  • 该答案假定您已经知道字段和值,询问者是否还没有解析字符串还不知道。 (2认同)
  • 我知道这并不能回答OP的问题,但这确实帮助我理解了如何轻松地从我的数据对象中创建JSON,而不需要向我的项目添加另一个库。 (2认同)

Aks*_*tel 14

您可以使用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")}")
Run Code Online (Sandbox Code Playgroud)

结果:

Name : Cedric Beust, Age : 23
Run Code Online (Sandbox Code Playgroud)

  • 如果您要通过API方法使用该对象,则这种方法更为可取,因为** klaxon **的`JsonObject`知道如何将自己序列化回Json。 (2认同)
  • 不建议使用Parser(),请改用Parser.default() (2认同)