Android - невозможно прочитать строку JSON с пробелами - PullRequest
0 голосов
/ 22 ноября 2018

У меня проблема с чтением строки из JSONArray.try-catch, окружающий код, запускает ошибку для элемента, не найденного.Я подозреваю, что это связано с пробелом, который является символом в конце каждого ключа строк.

    JSONArray dettaglio = result.getJSONArray("dettaglioAttivita");
    for(int i = 0; i <dettaglio.length(); i++){

        JSONObject row = dettaglio.getJSONObject(i);

        String durata = row.getString("Durata ");
        Toast.makeText(getApplicationContext(), durata.toString(), Toast.LENGTH_LONG).show();
    }

JSON RESPONSE : Обратите внимание, что строка ключа JSONObject имеетпробел в конце.

"dettaglioAttivita": [
  {
"Unità Dididattica ": " FISICA - MODULO A - [UD-1] ",
"Tipo Attività ": " LEZ",
"Tipo Formaz. ": " Base",
"Settore ": " FIS/01 - FISICA SPERIMENTALE",
"CFU ": " 6",
"Durata ": " 48"
},
  {
"Unità Dididattica ": " FISICA - MODULO B - [UD-2] ",
"Tipo Attività ": " LEZ",
"Tipo Formaz. ": " Base",
"Settore ": " FIS/01 - FISICA SPERIMENTALE",
"CFU ": " 6",
"Durata ": " 48"
}
],

Исключение составляет: org.json.JSONException: значение для Дурата не указано

1 Ответ

0 голосов
/ 22 ноября 2018

Только что протестировано в kotlin и для меня это работает с пробелами:

import org.json.JSONObject

fun main(args : Array<String>) {


    val json = """
    {
    "dettaglioAttivita": [
        {
            "UnitàDididattica ":"FISICA - MODULO A - [UD-1]",
            "TipoAttività ":"LEZ",
            "TipoFormaz. ":"Base",
            "Settore ": "FIS/01 - FISICA SPERIMENTALE",
            "CFU":" 6",
            "Durata ":" 48"
        },
        {
            "UnitàDididattica ":"FISICA - MODULO B - [UD-2]",
            "TipoAttivit à":"LEZ",
            "TipoFormaz ":"Base",
            "Settore ":"FIS/01 - FISICA SPERIMENTALE",
            "CFU ":"6",
            "Durata ":" 48"
        }
        ]
    }
    """

    println(json)


    try {
        val jsonObject = JSONObject(json)

        val dettaglio = jsonObject.getJSONArray("dettaglioAttivita")
        for (i in 0 until dettaglio.length()) {

            val row = dettaglio.getJSONObject(i)
            println("ROW: $row")

            val durata = row.getString("Durata ")
            println("DURATA: $durata")
        }
    }catch (e : Throwable){
        println(e.toString())
    }


}

Распечатано в:

ROW: {"Durata ":" 48","UnitàDididattica ":"FISICA - MODULO A - [UD-1]","TipoFormaz. ":"Base","CFU":" 6","TipoAttività ":"LEZ","Settore ":"FIS/01 - FISICA SPERIMENTALE"}
DURATA:  48
ROW: {"Durata ":" 48","CFU ":"6","UnitàDididattica ":"FISICA - MODULO B - [UD-2]","TipoFormaz ":"Base","TipoAttivit à":"LEZ","Settore ":"FIS/01 - FISICA SPERIMENTALE"}
DURATA:  48
...