如何将对象列表转换为JSON对象?

时间:2014-05-19 06:12:21

标签: java json

我有一个HashSet对象,我试图把它放在一个JSON对象上。

HashSet<Users> users; 

...

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

然而,

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

给了我

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

当HashSet中有2个条目时。 Users对象的非null值不存在。

还有更多将声明类型的List转换为JSONObject吗?

我在org.json使用JSON。*。

Users类如下:

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

我在HashSet&#34;用户&#34;中看到了这些条目。其他方面都很好。

TIA。

3 个答案:

答案 0 :(得分: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));        
}

输出:

  

{“users”:[“user2”,“user1”]}

==================================编辑============ =====================

我想我知道问题是什么。请尝试以下代码,如果有效,请告诉我们。

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));        
}

答案 1 :(得分:1)

使用gson,它更简单。

使用以下代码段:

 // 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);

从JSON字符串转换为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);

答案 2 :(得分:1)

问题在于您的Users课程。你似乎期望它只是拿起字段,但我不相信JSONObject这样做 - 相反,它发现了类似bean的吸气剂。

如果您尝试将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"}]}