Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gson.fromJSON返回0和null_Java_Json_Gson - Fatal编程技术网

Java Gson.fromJSON返回0和null

Java Gson.fromJSON返回0和null,java,json,gson,Java,Json,Gson,编辑:我的错,我创建了一个错误对象的列表 我正在尝试用Java反序列化一个我能正确看到的JSON。 但是使用Gson.fromJson(),所有属性都将变为0或null Group.java public class Group extends Board { private String created_on; private ArrayList<GroupMember> members; private ArrayList<GroupChat&g

编辑:我的错,我创建了一个错误对象的列表


我正在尝试用Java反序列化一个我能正确看到的JSON。 但是使用Gson.fromJson(),所有属性都将变为0或null

Group.java

public class Group extends Board {

    private String created_on;
    private ArrayList<GroupMember> members;
    private ArrayList<GroupChat> chat;
    private ArrayList<GroupInvite> invites;
    private int members_num;

    public Group(int id,
                 String name,
                 ArrayList<Post> posts,
                 int posts_num,
                 String created_on,
                 ArrayList<GroupMember> members,
                 ArrayList<GroupChat> chat,
                 ArrayList<GroupInvite> invites,
                 int members_num) {
        super(id, name, "group", posts, posts_num);
        this.members = members;
        this.chat = chat;
        this.invites = invites;
        this.members_num = members_num;
        this.created_on = created_on;
    }

    public int getId(){ return super.getBoardId(); }
    public String getName(){ return super.getName(); }
    public String getCreatedOn(){ return created_on; }
    public int getPostsNum(){ return super.getPostsNum(); }
    public ArrayList<Post> getPosts(){ return super.getPosts(); }
    public ArrayList<GroupMember> getMembers(){ return members; }
    public ArrayList<GroupInvite> getInvites(){ return invites; }

}
public ObservableList<Group> getUserGroups() throws IOException, InterruptedException {
        HttpRequest request = HttpRequest.newBuilder()
                .GET()
                .uri(URI.create("http://localhost:8000/groups/"))
                .setHeader("authorization", Auth.getInstance().getToken())
                .build();

        HttpResponse<String> response = ApiClient.getInstance().getHttpClient().send(request, HttpResponse.BodyHandlers.ofString());

        Gson gson = new Gson();
        String jsonOutput = response.body();
        System.out.println(response.body());

        Type listType = new TypeToken<List<Group>>(){}.getType();
        List<Group> list = new ArrayList<Group>();
        list = gson.fromJson(jsonOutput, listType);
        ObservableList<Group> groups = FXCollections.observableList(list);

        return groups;
    }
但是当我在格森转换的时候

Type listType = new TypeToken<List<Group>>(){}.getType();
List<Group> list = new ArrayList<Group>();
list = gson.fromJson(jsonOutput, listType);
Type listType=new-TypeToken(){}.getType();
列表=新的ArrayList();
list=gson.fromJson(jsonOutput,listType);
列表中的
的每个字段都是0或null,所以我不能使用这个列表,为什么?

没有反序列化方法 首先,类
Group
既没有定义参数构造函数,也没有定义
InstanceCreator
。 GSON无法正确实例化
,因此它使用
UnsafeAllocator
,它分配空实例。 ()

失配DTO 然后,即使GSON成功实例化了实例,传入的JSON也没有与
Group
类相同的字段。
类具有名为

boardId
聊天
创建
邀请
会员
会员人数
姓名
帖子
帖子

但是传入的JSON对象具有名为

组id
是所有者
加入日期
最后一次聊天阅读
用户
用户id


然后,GSON敌人在名称中找不到任何匹配项,
Group
的所有字段都是
null
0
问题是您认为您的数据是组列表。但事实并非如此! 数据是每个对象都有一个组的对象列表

如果替换此项:

Type listType = new TypeToken<List<Group>>(){}.getType();
List<Group> list = new ArrayList<Group>();
list = gson.fromJson(jsonOutput, listType);
然后,您将在您的组中拥有价值观

如果您只需要一个列表,则可以执行以下操作:

List<Group> groupList = list.stream()
            .map(groupWrapper -> groupWrapper.group)
            .collect(Collectors.toList());
List-groupList=List.stream()
.map(groupWrapper->groupWrapper.group)
.collect(Collectors.toList());

嗨,大家好,请阅读此链接。
Type listType = new TypeToken<List<GroupWrapper>>(){}.getType();
List<GroupWrapper> list = new ArrayList<>();
list = new Gson().fromJson(jsonOutput, listType);
class GroupWrapper {
    Group group;
}
List<Group> groupList = list.stream()
            .map(groupWrapper -> groupWrapper.group)
            .collect(Collectors.toList());