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

标签 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 对象的非空值不存在。

将声明类型的 List 转换为 JSONObject 是否还有更多操作?

我正在使用 org.json.* 中的 JSON。

Users 类如下:

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

我看到 HashSet“users”中的条目在其他方面都很好。

TIA。

最佳答案

问题出在您的 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"}]}

关于java - 如何将对象列表转换为 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730768/

相关文章:

java - 如何向 Varargs 添加新元素?

javascript - JSONP 返回 "Uncaught SyntaxError: Unexpected token :"

java - Character.isLowerCase(myChar) 和 'a' <=myChar && 'z' >=myChar 之间的区别

javascript - 循环遍历对象以执行最接近的高整数的数学运算?

javascript - 将字符串作为对象添加到已存在的对象

python 请求给出 'None' 响应,其中需要 json 数据

json - 在 Perl 中使用 JSON::XS::encode_json 将 64 位整数更改为 float

java - Camel 响应从 bean 返回到 ActiveMQ 队列

java - 有人可以解释如何使用 FastTags

java - 正则表达式检查单引号前面是否有另一个单引号