2014-05-19 218 views
1

我有一個HashSet對象,我試圖把一個JSON對象。如何將對象列表轉換爲JSON對象?

HashSet<Users> users; 

... 

JSONObject j = new JSONObject(); 
    j.put("users", users); 

然而,

System.out.println(j.toString(2));   

是給我

{"users": [ 
    {}, 
    {} 
]} 

當有HashSet中2項。用戶對象的非空值不存在。

是否有更多的轉換爲JSONObject的聲明類型列表?

我在org.json *上使用了JSON。

的用戶等級如下表所示:

public class Users { 
    byte[] pic; 
    String firstName; 
    String lastName; 
    String address; 
} 

我看到在HashSet中的條目「用戶」精每其他。

TIA。

+0

這是java嗎?請始終添加語言標記 –

+0

請顯示一個簡短但完整的示例來說明問題。你能夠成功地將* single *用戶轉換爲JSON嗎? (我的猜測是這個問題,而不是設置...) –

+0

@JonSkeet - 沒有別的代碼。請參閱Hirak的代碼 - 除了我的HashSet條目是我在應用程序中定義的類的對象之外,它們都是相同的。我看到HashSet條目罰款否則。 – Roam

回答

1

我使用下面的代碼得到了正確的結果。你能突出顯示你是否在做不同的事情?也許我可以做出類似的改變並嘗試一次。

public static void main(String[] args){ 
    HashSet<String> users = new HashSet<>(); 
    users.add("user1"); 
    users.add("user2"); 

    JSONObject j = new JSONObject(); 
    j.put("users", users); 
    System.out.println(j.toString(2));   
} 

輸出:

{ 「用戶」:[ 「USER2」, 「用戶1」]}

============== ====================編輯============================= ====

我想我認爲是什麼問題。請嘗試下面的代碼,並讓我們知道如果工作。

public static void main(String[] args) { 
    JSONObject o1 = new JSONObject(); 
    o1.put("1", new User("User1")); 
    JSONObject o2 = new JSONObject(); 
    o2.put("2", new User("User2")); 

    HashSet<JSONObject> users = new HashSet<>(); 
    users.add(o1); 
    users.add(o2); 

    JSONObject j = new JSONObject(); 
    j.put("users", users); 
    System.out.println(j.toString(2));   
} 
+0

這就是代碼 - 沒有別的。只有輸出是我在Q中顯示的內容。而HashSet條目是我定義的類型。 – Roam

+0

好吧,所以班級用戶....你可以發佈其內容? – Hirak

1

使用gson是非常非常簡單的。

使用下面的代碼片段:從JSON字符串

// create a new Gson object 
Gson gson = new Gson(); 

// convert your set to json 
String jsonUsersSet = gson.toJson(users); 

// print your generated json 
System.out.println("jsonUsersSet: " + jsonUsersSet); 

轉換爲Java對象

// Converts JSON string into a set of user object 
Type type = new TypeToken<Set<User>>(){}.getType(); 
Set<User> userSet = gson.fromJson(jsonUsersSet, type); 

// print your Set<User> 
System.out.println("userSet : " + userSet); 
0

問題是與你的Users類。你似乎期待它能夠拾取字段,但我不相信JSONObject會這樣做 - 相反,它會找到類似bean的getter。

如果您嘗試將實例轉換您的Users類的JSONObject你得到完全相同的結果({}) - 這個問題無關,與試圖轉換多個實例。 (值得從診斷問題中吸取教訓 - 總是試圖縮小範圍。)

只要您使用適當的getter創建類,它就可以正常工作。示例代碼:

public final class User { 
    private final String firstName; 
    private final String lastName; 

    public User(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 
} 

import org.json.*; 
import java.util.*; 

class Test { 
    public static void main(String [] args) throws Exception { 
     User user = new User("Jon", "Skeet"); 
     JSONObject single = new JSONObject(user); 
     System.out.println("Single user: " + single); 

     Set<User> users = new HashSet<>(); 
     users.add(new User("Jon", "Skeet")); 
     users.add(new User("Holly", "Skeet")); 

     JSONObject multiple = new JSONObject(); 
     multiple.put("users", users); 
     System.out.println("Multiple users: " + multiple); 
    } 
} 

輸出:

Single user: {"lastName":"Skeet","firstName":"Jon"} 
Multiple users: {"users":[{"lastName":"Skeet","firstName":"Holly"},{"lastName":"Skeet","firstName":"Jon"}]}