You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中解析JSON字符串遇String无法转JSONObject异常如何解决

问题原因

你遇到的报错核心原因是你拿到的fullJson内容不符合JSON对象的格式要求,具体分两种常见情况:

  • 你的接口返回的内容是被额外包裹了双引号的转义字符串,而非直接返回JSON结构:你校验时给出的格式是"{\"data\":[{\"temperaturaussen\":12,\"feuchtaussen\":77.41}]}",可以看到整个JSON结构外层多了一对双引号,内部的双引号还被加了转义符\,此时你拿到的fullJson开头是双引号而非{,自然无法被识别为JSONObject。
  • 另一种可能是接口返回的是带BOM头的UTF-8内容,开头多了不可见的\uFEFF字符,也会导致解析失败。
解决步骤
  1. 首先打印fullJson的完整内容和首尾字符,确认问题类型:
Log.d("DebugJson", "完整内容:$fullJson")
Log.d("DebugJson", "首字符:${fullJson.first()},尾字符:${fullJson.last()}")
Log.d("DebugJson", "首字符编码:${fullJson.first().code}")
  1. 根据问题类型处理:
  • 如果是外层多了双引号、内部有转义符的情况,先处理字符串再解析:
// 先去掉首尾的双引号,再替换掉内部的转义斜杠
val processedJson = fullJson.trim('"').replace("\\\"", "\"")
val dataJson = JSONObject(processedJson)
  • 如果是BOM头导致的问题(首字符编码为65279),先移除BOM头:
val processedJson = fullJson.replace("\uFEFF", "")
val dataJson = JSONObject(processedJson)
额外优化建议

你当前读取流的代码可以简化,Kotlin的use方法会自动关闭流,不需要手动关闭:

val fullJson = URL("你的接口地址").openConnection()
    .getInputStream()
    .bufferedReader(Charsets.UTF_8)
    .use { it.readText() }

内容的提问来源于stack exchange,提问作者user8110441

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:54:00