2017-12-09 2 views
0

私のアプリは、ユーザーの選択に基づいてAPIからJSONを解析します。各ユーザーの検索が異なる可能性があるため、APIコールを終了するたびに、ユーザーが検索するものを予測して、確立された解析構造を待っていることを予測できません。予測不可能なJSONオブジェクトを解析するにはどうすればよいですか?

問題は、別のAPI呼び出しからこの未定義/予測不可能なJSONオブジェクトを処理するJSON解析構造をアプリでどのように持つことができるかです。

私が必要とするのは、予期せぬ未知のJSONオブジェクトを既知のように扱う方法です。キーとその内部のデータを解析できます。

ありがとうございます。

+0

私は、JSONパーサを使います。 Android用の最も一般的なJSONパーサーは、ジェネリック構造(例えば 'Map ')への構文解析、または構造をナビゲートするための特注のAPI(例えば、 'JSONObject')を提供します。 – CommonsWare

+0

私の場合の実例を教えてもらえますか? –

+0

さて、['JSONObject'](https://developer.android.com/reference/org/json/JSONObject.html)があり、[' JsonReader'](https://developer.android.com)があります。 /reference/android/util/JsonReader.html)に、Android SDKの一部である2つの名前を付けます。どちらも任意のJSONコンテンツで動作します。 – CommonsWare

答えて

0

あなたは地図やHashMapのようないくつかのキーと値の構造物へのあなたのJSONに変換するObjectMapperを使用することができます。

Map<String,Object> result = new ObjectMapper().readValue(jsonData, Map.class);

jsonDataは、ファイル、ストリーム、バイト、文字列にすることができ、....

詳細:https://fasterxml.github.io/jackson-databind/javadoc/2.2.0/com/fasterxml/jackson/databind/ObjectMapper.html#readValue(byte[],%20java.lang.Class)

0

私はあなたのコードを持っていたが、私の説明があなたのために働くことを望むならもっと助けになるだろう。私は最近、サーバー側でユーザーが入力した内容を選択して電話に表示するアプリを作った。たとえば、米と魚を選び、別の人が米、魚、コーヒー、焼き豆を選びます。これらは異なるものですが、私は物を保持する配列を作った、配列の長さはあなたが選ぶものの数に依存します。次に解析するjsonオブジェクトを作成します。注:変数にユーザーが入れて安全なアイテムの数を数え、その変数を長さとして使用できます。

JSONObject jsonObject = new JSONObject(response); 
      if (jsonObject.getString(KEY_SUCCESS).equals("true")) { 
       JSONArray dataArray = jsonObject.getJSONArray("data"); 
       for (int i = 0; i < dataArray.length(); i++) { 

        JSONObject dataobj = dataArray.getJSONObject(i); 

すべてのユーザー入力を「データ」で保存しました。一つのことは、ユーザーからのリスト入力や長い段落/記事のようなものを取得しているかどうかわからないため、私の答えがあなたの説明に合わないことがあります。私はあなたがリストを取得していると仮定したので、配列を使うオプションを与えました。

+0

私のJSONレスポンスは、jsonArraのように解析できないという理由で、ネストされたJSONオブジェクト(別のjsonオブジェクト内に複数のjsonオブジェクト)です。 他に助けてもらえますか? –

関連する問題