0

JSONParser を使用して検索結果を取得しました。そのため、このチュートリアルに従いました: http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

問題は、私が使用しているAPIが次のような結果をもたらすということです:

{"response":[50036,{"aid":88131498,"owner_id":61775052,"artist":"Terror Squad","title":"Lean Back (OST Need For Speed Underground 2)","duration":249,"url":"http:\/\/cs4408.vkontakte.ru\/u59557424\/audio\/7f70f58bb9b8.mp3","lyrics_id":"3620730"},{"aid":106963458,"owner_id":-24764574,"artist":"«Dr. Dre ft Eminem, Skylar Grey (Assault Terror)","title":"I Need A Doctor (ASSAULT TERROR DUBSTEP REMIX)»","duration":240,"url":"http:\/\/cs5101.vkontakte.ru\/u79237547\/audio\/12cd12c7f8c2.mp3","lyrics_id":"10876670"}]}

私の問題は、見つかった結果の数である最初の整数 (ここでは 50036) を解析する必要があるときに発生します。

その整数の読み方がわかりません。

これは私のコードです:

private void instance(String artisttrack){
    // Creating JSON Parser instance
    JSONParser jParser = new JSONParser();

    // getting JSON string from URL
    String jsonurl = new String( "https://api.vk.com/method/audio.search?access_token=ACC_TOKEN&api_id=ID&sig=SIG&v=2.0&q=" + artistname + artisttrack + "&count=5");
    JSONObject json = jParser.getJSONFromUrl(jsonurl);

    try {
        // Getting Array of Contacts
        response = json.getJSONArray(TAG_RESPONSE);

        // looping through All Contacts
        for(int i = 0; i < response.length(); i++){
            JSONObject c = response.getJSONObject(i);

            // Storing each json item in variable
            //int results = Integer.parseInt(c.getString(TAG_RESULTS));
            String aid = c.getString(TAG_AID);
            String owner_id = c.getString(TAG_OWNER_ID);
            String artist = c.getString(TAG_ARTIST);
            String title = c.getString(TAG_TITLE);
            String duration = c.getString(TAG_DURATION);

            // Phone number is agin JSON Object
            //JSONObject phone = c.getJSONObject(TAG_PHONE);
            String url = c.getString(TAG_URL);
            String lyrics_id = c.getString(TAG_LYRICS_ID);
            Log.e("áaaaaaaaaaaaaaa", url);

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

}

JSONParser.java はチュートリアルに書かれているようなものです。

そして、logcat エラーの 2 行:

W/System.err(10350): org.json.JSONException: Value 50036 at 0 of type java.lang.Integer cannot be converted to JSONObject
W/System.err(10350):    at org.json.JSON.typeMismatch(JSON.java:100)
4

4 に答える 4

1

あなたの JSON サンプルは、結果を整理するための貧弱な方法です: 数値を結果オブジェクトと混ぜ合わせます。数値は、配列内のオブジェクトの数を示すはずですか、それとも何か他のものですか?

この数値が常に最初の要素であると想定でき、これによれば、このように動作するはずである場合は、ループの外で配列の最初の値を読み取ろうとすることができます。

response = json.getJSONArray(TAG_RESPONSE);

// from your example, num will be 50036:
num = response.getInt(0);

for (int i = 1; i < response.length(); i++){
    JSONObject c = response.getJSONObject(i);

リンクされたドキュメントの例には、この番号が文字列として含まれていることに注意してください。

{"response":
    ["5",
     {"aid":"60830458","owner_id":"6492","artist":"Noname","title":"Bosco",
"duration":"195","url":"http:\/\/cs40.vkontakte.ru\/u06492\/audio\/2ce49d2b88.mp3"},
     {"aid":"59317035","owner_id":"6492","artist":"Mestre Barrao","title":"Sinhazinha",
"duration":"234","url":"http:\/\/cs510.vkontakte.ru\/u2082836\/audio\/
d100f76cb84e.mp3"}]}

しかし、を としてJSONArray.getInt()解析します。Stringint

intまた、配列内のオブジェクトの値の一部も数値であることに注意してください。これらも次のように読みたい場合があります。

int aid = c.getInt(TAG_AID);
int owner_id = c.getInt(TAG_OWNER_ID);
int duration = c.getInt(TAG_DURATION);
于 2012-08-16T17:06:28.313 に答える
1

解析しようとしている値の多くはStringオブジェクトではありません。具体的には「aid」、「owner_id」、および「duration」です。正しい方法を使用して値を取得してください。例えば:

int aid = c.getInt(TAG_AID);
int owner_id = c.getInt(TAG_OWNER_ID);
String artist = c.getString(TAG_ARTIST);
String title = c.getString(TAG_TITLE);
int duration = c.getInt(TAG_DURATION);

編集: 私が見逃したもう 1 つのエラーは、50036 で配列を開始することです。これは JSONObject ではないため、そのように解析できません。条件ステートメントを追加して、配列インデックス 0 であるかどうかを確認しgetInt()、 を使用して int を解析し、残りの配列値を JSONObjects として解析できます。

于 2012-08-16T17:00:29.990 に答える
0

この "50036" のように 50036 を引用符で囲んでみてください。

于 2012-08-16T17:01:31.210 に答える