2016-12-09 36 views
0

我有一些從服務器返回的JSON數據。確定對象是數組還是字符串

有時數據是其他時間的數組,它返回一個空字符串(是的,我知道它應該返回一個空數組)。
所以我需要檢查FIRST如果類型是一個字符串的實例;如果是這樣,我會忽略它並繼續生活。
否則我需要讀取值。

如何確定對象是否爲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

我需要知道「Notes」的內容是什麼。它是一個字符串還是數組? –

+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它,但我最近沒有嘗試記住。

相關問題