2017-04-27 46 views
0

我的JSON數據可能包含對象或數組是這樣的:使用JSON解析對象或數組從服務器

{ 
    msg:'', 
    status:0, 
    data:{ 
    name:'x', 
    age:2 
    } 
} 

{ 
    msg:'', 
    status:0, 
    data:[{ 
    name:'x', 
    age:2 
    },{ 
    name:'y', 
    age:1 
    }] 
} 

我的豆:

class Result<T>{ 
    String msg; 
    int status; 
    T data; 
} 

class User{ 
    String name; 
    int age; 
} 

現在如何使用JSON來相應地解析數據?類User這裏只是其中的一個bean,還有其他類型的服務器返回的bean。

順便說一句,我正在使用Android庫。

+0

您可以通過編寫自定義解串器做到這一點,但不是直接的。 TBH,你描述的情況不應該發生。如果數據只有一個條目,那麼它應該是一個有一個條目而不是單個條目的數組。 – theblitz

回答

0

使用谷歌的gson

喜歡這個

Gson gson = new Gson(); Result result= gson.fromJson(jsonInString, Result.class);

0

爲了您的JSON數據,你應該bean類一樣,然後正常解析它:

class Result{ 
      String msg; 
      int status; 
      ArrayList<User> data; 
     } 

     class User{ 
      String name; 
      int age; 
     } 
+0

當'data'是單個對象時這不起作用 –

+0

當數據是數組而不是對象時,這將工作。 –

0

把你的JSON響應here並在url源文件中選擇:json,註釋樣式:Gson

,然後嘗試ModelName name = new Gson().fromJson("Json String",ModelName.class);

0

如果你知道<T>在每一個具體的例子(你應該),你只需要能夠使用TypeToken s內輕鬆創建ParameterizedType S:

private static final Gson gson = new Gson(); 

private static final Type userType = new TypeToken<Result<User>>() { 
}.getType(); 

private static final Type userListType = new TypeToken<Result<List<User>>>() { 
}.getType(); 

public static void main(final String... args) 
     throws IOException { 
    final String withObjectJson = getPackageResourceString(Q43658341.class, "with-object.json"); 
    final String withMultipleJson = getPackageResourceString(Q43658341.class, "with-array.json"); 
    final Result<User> user = gson.fromJson(withObjectJson, userType); 
    dumpUsers(singletonList(user.data)); 
    final Result<List<User>> multipleUsers = gson.fromJson(withMultipleJson, userListType); 
    dumpUsers(multipleUsers.data); 
} 

private static void dumpUsers(final Iterable<User> users) { 
    for (final User u : users) { 
     System.out.println(u.name); 
    } 
} 

注意Type實例可以被視爲常量並創建一次,以及Gson實例可以。

在情況下,如果你想「對齊」值列表,那麼你可能在Retrofit and Gson: parsing array/element-polymorphic objects感興趣:

class Result<E> { 
    String msg; 
    int status; 
    @JsonAdapter(AlwaysListTypeAdapterFactory.class) List<E> data; 
} 
0

我認爲你無法預知什麼形式的迴應是,它是動態的 - 有時單對象,有時候是一個列表。簡單的解決方案是第一家門店只是一個JsonElement

class Result{ 
     String msg; 
     int status; 
     JsonElement data; 
    }