2016-10-30 1 views
0

я написал такой код, чтобы прочитать JSON значение объекта массива:Я хочу, чтобы сравнить текстовое значение из API Rest с элементом Web Application

Content, как это «

jQuery19108586557654813183_1477636156780({ 
"current": { 
    "all": { 
     "android": [{ 
      "self": { 
       "un": 86, 
       "in": 2382, 
       "ri": 756 
      } 
     }, { 
      "Facebook": { 
       "un": 168, 
       "in": 570, 
       "cpi": 452.59000000000015, 
       "ri": 301 
      } 
     }, { 
      "CPI_1_Network": { 
       "un": 203, 
       "in": 539, 
       "ri": 375, 
       "cpi": 401.2800000000001 
      } 
     }, { 
      "Instagram": { 
       "in": 854, 
       "ri": 34, 
       "un": 9, 
       "cpi": 14.239999999999998 
      } 
     }, { 
      "Ad-Network-2": { 
       "in": 592, 
       "un": 89, 
       "cpi": 150.10999999999999 
      } 
     }, { 
      "Top-shoppers": { 
       "in": 892, 
       "cpi": 12.500000000000002, 
       "un": 12, 
       "ri": 35 
      } 
     }], 
     "ios": [{ 
      "CPI_1_Network": { 
       "un": 55, 
       "ri": 97, 
       "in": 140, 
       "cpi": 98.38999999999996 
      } 
     }, { 
      "Ad-Network-2": { 
       "un": 17, 
       "in": 137, 
       "cpi": 27.279999999999994 
      } 
     }, { 
      "Instagram": { 
       "cpi": 7.8500000000000005, 
       "ri": 7, 
       "in": 197, 
       "un": 2 
      } 
     }, { 
      "Top-shoppers": { 
       "in": 207, 
       "ri": 8, 
       "un": 4, 
       "cpi": 4.08 
      } 
     }, { 
      "self": { 
       "in": 567, 
       "cpi": 1.21, 
       "un": 24, 
       "ri": 198 
      } 
     }, { 
      "Facebook": { 
       "in": 142, 
       "un": 42, 
       "ri": 69, 
       "cpi": 103.86 
      } 
     }] 
    }, 
    "androidTotal": 7330, 
    "iosTotal": 1769, 
    "totalUninstall": 711, 

» я хочу, чтобы прочитать это содержимое значение» "totalUniqueInstall": 7219, "totalUniqueUninstall": 711 }, "предыдущий": { "androidTotal": 4156, "iosTotal": 1063, "totalUninstall": 1120 } })

try { 
     URL url = new URL("url content "); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 

if (conn.getResponseCode() != 200) { 
      throw new RuntimeException(" HTTP error code : " +  conn.getResponseCode()); 
     } 

Scanner scan = new Scanner(url.openStream()); 
String entireResponse = new String(); 
while (scan.hasNext()) 
entireResponse += scan.nextLine(); 
System.out.println("Response is : " + entireResponse); 
scan.close(); 

entireResponse =entireResponse.substring(entireResponse.indexOf("{"), entireResponse.length() - 1); 

JSONObject obj = new JSONObject(entireResponse.trim()); 
    JSONArray arr = obj.getJSONArray("current"); 
    String uniqueInstalls = String.valueOf(obj.get("totalUniqueInstall")); 
    System.out.println(uniqueInstalls); 

     conn.disconnect(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Но я получаю исключение во время выполнения в Java org.json.JSONException: JSONObject["current"] is not a JSONArray.

Пожалуйста, помогите мне в этом.

+0

вы можете предоставить образец ожидаемого содержания JSON? – developer

+0

Вы можете использовать контент URL. щелкните его на новой вкладке. – Ram

+0

FAILED: installsWithAPI org.json.JSONException: JSONObject ["current"] не является JSONArray. \t в org.json.JSONObject.getJSONArray (JSONObject.java:622) \t в com.AppICE_TC_DemoApp.DemoApp_DashBoard.installsWithAPI (DemoApp_DashBoard.java:54) \t в sun.reflect.NativeMethodAccessorImpl.invoke0 (метод Native) – Ram

ответ

0

Поскольку объект в текущем узле является JSONObject, это не JSONArray

int uniqueInstalls = obj.getJSONObject("current").getInt("totalUniqueInstall"); 
String uniqueInstallString = "" + uniqueInstalls; 

или:

String uniqueInstalls = obj.getJSONObject("current").get("totalUniqueInstall").toString(); 
+0

Теперь я получаю это исключение "org.json.JSONException: JSONObject [" totalUniqueInstall "] не строка." – Ram

+0

Как вы упомянули в предыдущем комментарии. Исходя из этого, я изменил тип возврата на значение Int. Отгрузка кода работает нормально и возвращает значение. Код «int uniqueInstalls = obj.getJSONObject (« текущий »). GetInt (« totalUniqueInstall »);« Но возникает с другой проблемой. Мне нужно сравнить значение с Dashboard. У которого есть тип возврата строки. Но текущее значение - тип Int. – Ram

+0

@RamaSwamyS за вашу потребность, во всяком случае, лучше сравнить в 'int' – Danh

0

Как исключение ясно говорит current элемент не является массивом, как вы ожидаете,

Проблема с линией JSONArray arr = obj.getJSONArray("current"); , которую необходимо изменить.

Предполагая, что totalUniqueInstall является int типа, вы можете передать код ниже:

String uniqueInstalls = obj.getJSONObject("current").getInt("totalUniqueInstall"); 
+0

Я очищен от своих сомнений, спасибо за помощь @Danh. Моя отправка кода работает нормально. – Ram