Java 我应该如何解决此错误?

Java 我应该如何解决此错误?,java,android,json,parsing,Java,Android,Json,Parsing,我使用JSONParser获得搜索结果,为此我遵循了本教程: 问题是,我使用的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\/au

我使用JSONParser获得搜索结果,为此我遵循了本教程:

问题是,我使用的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();
    }

}
试着改变

response = json.getJSONArray(TAG_RESPONSE);
进入


我对JSONObject没有任何经验,但经常处理类型不匹配的问题。

您试图解析的许多值不是
字符串
对象,特别是“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);

编辑:我错过的另一个错误是你用50036开始你的数组。这不是JSONObject,因此无法进行解析。您可以添加一个条件语句来检查是否是数组索引0,以使用
getInt()
解析int,然后将其余数组值解析为JSONObject。

尝试将50036放在类似“50036”的引号中。

您的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);
但是
JSONArray.getInt()
将把
字符串作为
int
为您解析

请注意,数组中对象中的某些值也是数字,您可能希望将其读取为
int

int aid = c.getInt(TAG_AID);
int owner_id = c.getInt(TAG_OWNER_ID);
int duration = c.getInt(TAG_DURATION);

我认为这是一个格式问题。例如,name:number。但是5036的格式不同,它是5036:[数组项]。在给您的示例中,格式非常不同。项目名称:[数组项目]。这很可能是JSon解析的问题。但我有一个问题,50036是一个依赖于搜索的变量。。。因此,我无法完成num=json.getInt(0);我还能做什么?谢谢@BamsBamx数字可以是可变的,即根据搜索具有不同的值。代码仍然有效:读取数字并按其执行。再次感谢!如果我插入:num=json.getInt(0);我在org.json.JSONObject.getInt(java.lang.string)中得到了org.json.JSONObject.getInt(java.lang.string)方法。JSONObject不能应用于(int)@BamsBamx。很抱歉,我的代码中有错误,请参见编辑:使用
response
变量,例如
response.getInt(0)
Ok,然后我得到了这个/System.err(14224):org.json.JSONException:java.lang.Integer类型的0处的值50046无法转换为JSONObject50036是变量int的结果,因此我无法将该数字加引号
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"}]}
int aid = c.getInt(TAG_AID);
int owner_id = c.getInt(TAG_OWNER_ID);
int duration = c.getInt(TAG_DURATION);