У меня есть 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?




Для этого вам понадобится отражение ... Но вам действительно стоит подумать об использовании существующей библиотеки, такой как Jackson, в которой есть ObjectMapper, который выполняет эту работу за вас.
Вот ссылка на основы использования Jackson для сериализации / десериализации объектов в JSON и обратно.
https://www.baeldung.com/jackson-object-mapper-tutorial
Надеюсь, это поможет!
Тогда, возможно, этот ответ вам поможет. stackoverflow.com/questions/28391982/…
Там написано android, но это справедливо для любого java-приложения.
спасибо за помощь, но я не это ищу :)
Вам просто нужен класс комментария. Попробуй это:
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: Внутренний автор
как я могу добавить ссылку на класс в том же классе ?? Я думаю это невозможно
Вам не нужен класс Replies. Это не соответствует вашему 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}}}
Можно ли использовать ту же ссылку на класс, которую вы использовали для ответа?
Конечно. private static class Node<E> внутри реализации java.util.LinkedList сделан таким же образом.
Эй, я использовал твой метод. Теперь у меня другая проблема. Есть ли способ вызвать десериализатор gson по умолчанию в JsonDeserializer?
да. Я нашел такой же ответ
На самом деле я хочу сделать это в gson