Могу ли я десериализовать json рекурсивным способом, включив родительский класс в дочерний класс? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть json что-то вроде

{
    "author":"jack",
    "comment_body":"any message body",
    "replies":{
        "author":"john",
        "comment_body":" reply body",
        "replies": {
            "author":"john",
        "comment_body":" reply body",
        "replies":{
            ...
        }
        }
    }
}

как я могу разобрать этот json, пока мои классы

class Comment {
private String author;
private String comment_body;
private Replies replies;
}

class Replies{
private Comment comment_tree;
}

Любая помощь о том, как разобрать ответ на комментарий в gson?

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Вам просто нужен класс Comment.Попробуйте это:

class Comment {
    private String author;
    private String comment_body;
    private Comment replies;
}

Пример кода:

public class Main {

    public static void main(String[] args) {
        Comment comment = new Comment();
        comment.setAuthor("Outer Author");
        comment.setReplies(new Comment());
        comment.getReplies().setAuthor("Inner Author");

        System.out.println("Author 1 :"+comment.getAuthor());
        System.out.println("...Author 2 :"+comment.getReplies().getAuthor());
    }
}

class Comment {
    private String author;
    private String comment_body;
    private Comment replies;

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getComment_body() {
        return comment_body;
    }

    public void setComment_body(String comment_body) {
        this.comment_body = comment_body;
    }

    public Comment getReplies() {
        return replies;
    }

    public void setReplies(Comment replies) {
        this.replies = replies;
    }
}

Пример вывода:

Автор 1: Внешний Автор
... Автор 2: Внутренний Автор

0 голосов
/ 16 октября 2018

Вам не нужен класс Ответов.Это не соответствует вашему JSON.Здесь у вас есть один рекурсивный класс.

Прежде всего, вам нужно немного отредактировать ваш JSON, например (добавлено null):

{
    "author": "Jack",
    "comment_body": "Any message body",
    "replies": {
        "author": "John",
        "comment_body": "Reply body",
        "replies": {
            "author": "Smith",
            "comment_body": "Another reply body",
            "replies": null
        }
    }
}

Далее создайте рекурсивную переменнуюв вашем классе:

public class Comment {
    String author;
    String comment_body;
    Comment replies;

    @Override
    public String toString() {
        return "Comment{author='" + author + "', comment_body='" + comment_body + "', replies=" + replies + '}';
    }
}

Наконец, исполняемый класс:

import com.google.gson.Gson;

public class Main {
    public static void main (String[] args) {
        String json =   "{\n" +
                        "    \"author\": \"Jack\",\n" +
                        "    \"comment_body\": \"Any message body\",\n" +
                        "    \"replies\": {\n" +
                        "        \"author\": \"John\",\n" +
                        "        \"comment_body\": \"Reply body\",\n" +
                        "        \"replies\": {\n" +
                        "            \"author\": \"Smith\",\n" +
                        "            \"comment_body\": \"Another reply body\",\n" +
                        "            \"replies\": null\n" +
                        "        }\n" +
                        "    }\n" +
                        "}\n";
         Comment comment = new Gson().fromJson(json, Comment.class);
         System.out.println(comment);
    }
}

Вывод:

Comment{author='Jack', comment_body='Any message body', replies=Comment{author='John', comment_body='Reply body', replies=Comment{author='Smith', comment_body='Another reply body', replies=null}}}
0 голосов
/ 16 октября 2018

Вам понадобится рефлексия, чтобы сделать это ... Но вам действительно следует подумать об использовании существующей библиотеки, такой как Джексон, в которой есть ObjectMapper, который выполняет эту работу за вас.

Вот ссылка на основыиспользуя Джексона для сериализации / десериализации объектов в и из JSON.

https://www.baeldung.com/jackson-object-mapper-tutorial

Надеюсь, это поможет!

...