webAPIからJSONを取得するandroidアプリ実装中に出会したエラ〜
1 |
org.json.JSONArray cannot be converted to JSONObject |
要するに、JSONArrayだから、JSONObjectに変換できませんよ!ってこと
当たり前じゃんって思うかもですが、結構迷いました。先に結論だけ述べとくと、JSONの { と[ の違いによるもの。解決方法は以下で解説します。
環境
- Android Studio 3.4
- Android 9 (API level 28)
- JAVA
原因
JSONのレスポンス形式の違いによるものであった。以下に2例あげるので、読み出すwebAPIのJSONレスポンス形式に合わせて使用してください
JSONObjectだけで直接読み出せる形式
以下のJSONデータを受信する事例です
1 2 3 4 5 6 |
{ "id": "1", "title": "Electronics Intern", "company": "GA SOFTWARE TECHNOLOGIES PVT LTD", "category": "Electronics Engineering" } |
上記JSONは {} で囲まれてるので、getJSONObject(id)などで直接読み込める
大事な事なのでもう一度 {} で囲まれているところ
実際に読込むプログラムは以下
1 2 3 4 5 |
JSONObject JSON = new JSONObject(response); String id = rootJSON.getString("id"); String title = rootJSON.getString("title"); String company = rootJSON.getString("company"); String category = rootJSON.getString("category"); |
JSONArrayで読み出す形式
以下のJSONデータを受信する事例です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[ { "id": "1", "title": "Android Developer", "company": "InoXapps Mobile Solutions Pvt Ltd", "category": "Mobile App Development" }, { "id": "2", "title": "Mobile App developer", "company": "RV Media Inc", "category": "Mobile App Development" }, { "id": "3", "title": "Electronics Intern", "company": "GA SOFTWARE TECHNOLOGIES PVT LTD", "category": "Electronics Engineering" } ] |
上記JSONは {} だけでなく、[ ] で囲まれています。なので、配列処理が必要になってきます。
[]の中に{}があるJSONデータを処理するためには、JSON配列ノード処理が必要です。
そのコードは以下です。
1 2 3 4 5 6 7 8 9 |
for(int i=0; i < jsonarray.length(); i++) { JSONObject jsonobject = jsonarray.getJSONObject(i); String id = jsonobject.getString("id"); String title = jsonobject.getString("title"); String company = jsonobject.getString("company"); String category = jsonobject.getString("category"); } |
2022/5/4