0

JSON の何が問題なのかわかりません。JSONObject に変換できないというエラーが表示されます。フォーラムで検索しましたが、答えが見つかりません。

コード (解析する):

JSONObject json = new JSONObject(result.toString().replace("\\", " "));
                    JSONArray jArray = json.getJSONArray("timetable");

                    for(int i = 0; i < jArray.length(); i++) {
                        JSONObject json_data = jArray.getJSONObject(i);
                        String class_school = json_data.getString("class");
                        String teacher = json_data.getString("teacher");
                        String subject = json_data.getString("subject");
                        String room = json_data.getString("room");
                        timetList.add(new TimeTable(subject, class_school + " " + teacher + " " + " " + room));
                    }

JSON:

{"timetable":[{"teacher":"Woh","subject":"BVH","room":"017","change":"no"},{"teacher":"Rrl","subject":"BI","room":"045","change":"no"},{"teacher":"Ajg","subject":"WI","room":"019","change":"no"},{"teacher":"Sgh","subject":"NE","room":"119","change":"no"},{"teacher":"Rom","subject":"FA","room":"116","change":"no"},{"teacher":"Her","subject":"GS","room":"127","change":"no"},"free","free"]}

ログキャット:

03-29 15:06:11.356: E/error(822): Value free at 6 of type java.lang.String cannot be converted to JSONObject
4

3 に答える 3

1

私には、最後の 2 つのエントリ (「無料」、「無料」) を JSONObject に解析しようとしているようです。何らかの理由で空のエントリを追加する必要がある場合は、{} を使用します。

getString の代わりに optString を使用することを検討してください (または try catch ステートメントを使用して例外を処理します)。

于 2013-03-29T15:27:13.527 に答える
0

問題は にありStringます。あなたのJSON文字列が壊れており、それが原因です

タイプ java.lang.String の 6 で解放された値を JSONObject に変換できません

あなたの文字列を見てください:

{
  "timetable": [
                {"teacher":"Woh","subject":"BVH","room":"017","change":"no"},
                {"teacher":"Rrl","subject":"BI","room":"045","change":"no"},
                {"teacher":"Ajg","subject":"WI","room":"019","change":"no"},
                {"teacher":"Sgh","subject":"NE","room":"119","change":"no"},
                {"teacher":"Rom","subject":"FA","room":"116","change":"no"},
                {"teacher":"Her","subject":"GS","room":"127","change":"no"},

                "free","free"
              ]
}

この予期しないシーケンスを削除する必要があります。

"free","free"

最後のコンマはJSONObject教師の値Herで、うまくいくはずです。

于 2013-03-29T15:29:05.253 に答える
0

文字列は有効な JSON です。でも

JSONObject json_data = jArray.getJSONObject(i);

i配列の位置にあるエンティティが JSON オブジェクトであると仮定します。「free」は文字列であり、JSON のオブジェクト タイプではない ({} で囲まれていない)getJSONObject(i)ため、文字列からオブジェクトを作成しようとすると、この例外がスローされます。

文字列は で抽出できますjArray.getString(i)が、本当の秘訣は position でエンティティのタイプを判別することiです。ジェネリックjArray.get(i)を試してから、戻り値をイントロスペクトしてその型を判断できます。

于 2013-04-10T18:20:00.580 に答える