2015-09-11 4 views
0

Я использую библиотеку Unirest для разбора некоторых JSON. Я получаю от API MAshape. Я новичок в создании HTTP-запросов на Java, и у меня возникли проблемы с пониманием ошибки.Невозможно получить JSON в массив из запроса POST

Функция я сделал это:

public ArrayList<String> httpPost(int year) { 
    HttpResponse<String> response = null; 
    try { 
     response = Unirest.post("https://--------.p.mashape.com/v1/calculate/" + year) 
       .header("X-Mashape-Key", "--------------------------") 
       .header("Content-Type", "application/x-www-form-urlencoded") 
       .header("Accept", "application/json") 
       //.field("blabla", "blabla") 
       .field("filing_status", myFS) 
       .field("pay_periods", myPP) 
       .field("pay_rate", getGrossPay()) 
       .field("state", myState) 
       .asString(); 
    } catch (UnirestException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    // retrieve the parsed JSONObject from the response 
    JSONObject myObj = new JSONObject(response); 
    JSONArray results = new JSONArray(); 
    try { 
     results = myObj.getJSONArray("annual")); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    ArrayList<String> list = new ArrayList<String>(); 
    if (results != null) { 
     int len = results.length(); 
     for (int i=0;i<len;i++){ 
     try { 
      list.add(results.get(i).toString()); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
    } 
    return list; 
} 

Я получаю ошибку:

org.json.JSONException: JSONObject["annual"] not found 

Я выводимый переменную response в файл, а файл был [email protected] в нем. Я не знаю, откуда это взялось.

Просто, чтобы проверить, я использовал hurl.it и тот же ответ, который я ставлю в моей программе дает успешный ответ:

{ 
    "annual": { 
    "state": { 
     "amount": 68232.65 
    }, 
    "fica": { 
     "amount": 91800 
    }, 
    "federal": { 
     "amount": 418014.8 
    } 
    }, 
    "per_pay_period": { 
    "state": { 
     "amount": 5686.05 
    }, 
    "fica": { 
     "amount": 7650 
    }, 
    "federal": { 
     "amount": 34834.57 
    } 
    } 
} 

Я попытался изменить тип response от String к JsonNode но Ждут» и я действительно не знаю, как с этим работать. Я также добавил все необходимые библиотеки. Любая помощь?

+1

Заменить 'myObj.getJSONArray ("ежегодный"));' 'по myObj.getJSONObect ("ежегодный"));' ' – BNK

+0

JSONObject [ "ежегодный"] не found' я думал, что это будет потому что он был «годовой», был массивом, но это не так. Означает ли это, что проблема с JSON я получаю? Есть скобки на 'годовых' в ошибке, делает ли JSON скобки вокруг массива? – ashraj98

ответ

0

Использование myObj.getJSONObject("annual");

+0

'JSONObject [" annual "]' not found Я думал, что это сработает, потому что это 'year' был массивом, но это не так. Означает ли это, что проблема с JSON я получаю? Есть скобки на годовой в ошибке, требует ли JSON скобки вокруг массива? – ashraj98

+0

Да, JSON требует скобок вокруг массива – JasonMu

+0

попробуйте этот способ JSONObject myObj = new JSONObject (response.getBody()); JSONObject results = new JSONObject(); results = myObj.getJSONObject ("annual")); – JasonMu

Смежные вопросы