2016-12-09 5 views
0

У меня есть данные JSON, возвращаемые с сервера.Определить, является ли объект массивом или строкой

Иногда данные являются временными массивами Array, они возвращают пустую строку (да, я знаю, что она должна возвращать пустой массив).
Поэтому мне нужно проверить FIRST, если тип является экземпляром String; если это так, я собираюсь игнорировать его и продолжать жизнь.
Else Мне нужно прочитать значения.

Как определить, является ли объект String?

Я посмотрел на это SO question и некоторые другие, но я не думаю, что это точно соответствует моему сценарию.
Я чувствую, что я рядом, но мой код не соответствует тому, что я не могу передать объект в строку.
Но если я передам его в строку ..., то он ВСЕГДА будет экземпляром строки. Бесконечная петля.

Здесь я до сих пор.

private void myMethod(JSONObject data){ 
    if (data.has("Notes")){ 
     Object json = new JSONTokener(data.getJSONObject("Notes")).nextValue(); 

     if(data.getJSONObject("Notes") instanceof String) { 
      JSONArray array = data.getJSONObject("Notes").getJSONArray("Note"); 
      //do all the array stuff 
     } 
    } 
} 

JSON с массива Пример

{ "Data": { 
     "key": "A value", 
     "another key": "some value", 
     "Notes": { 
      "Note": ["1", "2", "3", "4"] 
     } } } 

JSON без массива Пример

{ "Data": { 
     "key": "A value", 
     "another key": "some value", 
     "Notes": "" 
    } } 
+1

'getJSONObject' возвращает' JSONObject', который не является 'instanceof String' –

+0

Мне нужно знать, что такое содержимое« Примечания ». Это строка или массив? –

+0

Я думаю, что вы хотите 'get (" Notes ") instanceof', так как' get' - это то, что возвращает класс 'Object'. Вы также можете попробовать один из методов 'opt', который возвращает' null', когда он не может преобразовать. –

ответ

1

Вы это

Object json = new JSONTokener(data.getJSONObject("Notes")).nextValue(); 

Но вы не используете json здесь. Вы вытащили getJSONObject("Notes") во второй раз.

if(data.getJSONObject("Notes") instanceof String) { 

Попробуйте

if(json instanceof String) { 

Если это не сработает, я бы попробовать

JSONObject notesObj = data.optJSONObject("Notes"); 
if (noteObj == null) { 
    // It might be a string, but it was not an object 
} 

Я не уверен, что произойдет, если вы просто использовали getString("Notes") против значение, которое было объектом. Это может быть toString это, но я не пробовал это недавно, чтобы помнить.

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