首页 > 解决方案 > 在 Android Studio 中解析 JSON 字符串

问题描述

我试图将字符串转换为 JSON 对象,但我收到以下错误消息

E/JSON Parser: Error parsing data org.json.JSONException: Value {"data":[{"temperaturaussen":12,"feuchtaussen":77.41,"temperaturbadezimmer":21}]} of type java.lang.String cannot be converted to JSONObject

我像这样得到我的数据

val url = URL("url")
val connection : URLConnection = url.openConnection()
connection.connect()
val bufferedInputStream = BufferedInputStream(connection.getInputStream())
val bufferedReader : BufferedReader = bufferedInputStream.bufferedReader(Charsets.UTF_8)
val stringBuffer = StringBuffer()
for (line in bufferedReader.readLines()){
    stringBuffer.append(line)
}
bufferedReader.close()
val fullJson : String = stringBuffer.toString()

我知道来自 url 的 Json 字符串是有效的,因为我在https://jsonformatter.curiousconcept.com/上检查了它,看起来像这样

"{\"data\":[{\"temperaturaussen\":12,\"feuchtaussen\":77.41}]}"

但是为什么当我尝试将其转换为 JSON 时会收到此错误消息?

try {
        val dataJson = JSONObject(fullJson)
    } catch (e: JSONException) {
        Log.e("JSON Parser", "Error parsing data $e")
    }

标签: jsonkotlinparsing

解决方案


您尝试解析的 JSON 似乎不是 JSON 对象(即{...}),而仅仅是 JSON 字符串(即"..."),因为引号似乎已转义(即\",而不是")。

例如,这是一个有效的 JSON 字符串,但它不是一个有效的 JSON 对象

"{\"data\":[{\"temperaturaussen\":12,\"feuchtaussen\":77.41}]}"

虽然这是一个有效的 JSON 对象:

{"data":[{"temperaturaussen":12,"feuchtaussen":77.41}]}

推荐阅读