前提・実現したいこと
Androidのアプリを開発しており、WEBAPIと連携させて取得したJSONファイルから文字列を取得し表示する機能の実装を考えています。
※アプリの開発はAndroid Studioで開発し、WEBAPIはFlaskを利用して開発しています。
DBの作成は、「DB Browser for SQLite」で作成しています。
DBは以下の通りです。
|id|name|message|
|:--|:--:|-:-|
|1|施設A|ここは施設Aの情報です|
|2|施設B|ここは施設Bの情報です|
|3|施設C|ここは施設Cの情報です|
発生している問題・エラーメッセージ
エラー分は以下の通りです。
Object型からArray型(または逆)に変換できません。とのメッセージです。
これは、返されたJAONファイルの記述で’{}’ではなく’[]’となっていることが原因であるかと考えています。
org.json.JSONException: Value [[1,"施設A","ここは施設Aの情報です"], [2,"施設B","ここは施設Bの情報です"],[3,"施設C","ここは施設Cの情報です"]] of type org.json.JSONArray cannot be converted to JSONObject
該当のソースコード
以下は、Android Stdioのコード一部です。(JSONファイルから文字列を取り出す部分)
java
1 @UiThread 2 @Override 3 public void run(){ 4 //ここにUIスレッドで行う処理コード 5 String msg = ""; 6 try { 7 JSONObject rootJSON = new JSONObject(_result); 8 msg = rootJSON.getString("message"); 9 } 10 catch (JSONException ex) { 11 Log.e(DEBUG_TAG, "JSON解析失敗", ex); 12 } 13 TextView tvresult = findViewById(R.id.tv_result); 14 tvresult.setText(msg); 15 }
上記のtry内のコードが、悪いとは思うのですがどう修正したらよいのかわからない状態です。
以下は、WEBAPIのコードです。
Python
1from flask import Flask, app, jsonify, g 2import sqlite3 3 4app = Flask(__name__) 5#JSONでの日本語の文字化け阻止 6app.config['JSON_AS_ASCII'] = False 7 8#DBに接続 9def get_db(): 10 if 'db' not in g: 11 g.db = sqlite3.connect("sample.sqlite3") 12 return g.db 13#DBとの接続を終了 14def close_db(e=None): 15 db = g.pop('db', None) 16 if db is not None: 17 db.close() 18 19@app.route('/', methods=["GET"]) 20def index(): 21 mydata = [] 22 db = get_db() 23 cur = db.execute("select * from mydata") 24 mydata = cur.fetchall() 25 return jsonify(mydata)
上記のreturn文でJSONファイルを返しているのですが、ブラウザで確認したところ
[ [ 1, "施設A", "ここは施設Aの情報です" ], [ 2, "施設B", "ここは施設Bの情報です" ], [ 3, "施設C", "ここは施設Cの情報です" ] ]
となって返されていました。
分からないこと
この問題の解決手段は、
1.WEBAPI側で、アプリ側がJSONObjectで扱えるように取得する。(’{}’→’[]’)
2.アプリ側で、JSONArray内の取得方法を記述してmessageを取得する
かの2パターンあると考えています。
が、どちらもどのようにコーディングすれば問題を解決できるか分からない状態です。
ご教授いただければ幸いです。
不足情報があれば、言っていただけると追記します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/07 03:44