当前位置: 首页 > 知识库问答 >
问题:

如何使用gson将json转换为字符串

怀飞扬
2023-03-14

我正在尝试从json转换为Java对象。我收到一个json字符串,其中包括一个书籍列表:

[{"author":"Jonathan Khatz",
 "id":8,
 "name":"Criptography  6",
 "publisher":"Chapman",
 "year":2010},
 {"author":"Hausi Muller",
 "id":9,
 "name":"SelfAdaptiveSystem",
 "publisher":"UVic",
 "year":2010}]

我创建了一个名为Books的对象:

package RESTful.client.model;

public class Books {
    private int id;
    private String name;
    private String author;
    private int year;
    private String publisher;

    public Books(){
    }

    public Books(int id, String name, String author, int year, String publisher){
        this.id=id;
        this.name=name;
        this.author=author;
        this.year=year;
        this.publisher=publisher;
    }

    // public Getter & Setter methods
}

另外,我正在使用doGet方法从RESTful webservice中以以下方式检索这些数据:

package RESTful.client.getBooks;
import RESTful.client.model.*;

// imports omitted

/**
 * Servlet implementation class GetBooksByYear
 */
@WebServlet("/GetBooksByYear")
public class GetBooksByYear extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetBooksByYear() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        Client client= Client.create();
        //PrintWriter printWriter = response.getWriter();
        String year= request.getParameter("year");
        System.out.println("Year to search: "+year);                 
        WebResource webResource= client.resource("http://localhost:8080/library/webapi/books/year/"+year);
        ClientResponse rs=webResource.accept(
                           MediaType.APPLICATION_JSON_TYPE,
                           MediaType.APPLICATION_XML_TYPE).
                           get(ClientResponse.class);
        System.out.println("Get operation response processing...\n");
        String jsonBooks=rs.getEntity(String.class);

        //kajacx solution:
        Gson gson = new Gson();
        Books[] booksA = gson.fromJson(jsonBooks, Books[].class);
        List<Books> books = Arrays.asList(booksA);
        for(Books book : books) {
            System.out.println(book.getName()+", "+book.getAuthor()+", "+book.getAuthor()+", "+ book.getYear());
        }

    }
java.lang.NoClassDefFoundError: com/google/gson/Gson
    RESTful.client.getBooks.GetBooksByYear.doGet(GetBooksByYear.java:60)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

干杯

共有1个答案

刘和昶
2023-03-14

我这样做了,因为这是我一直使用GSON的方式:

Gson gson = new Gson();

String data = "[{\"author\":\"Jonathan Khatz\", \"id\":8,"
    + "\"name\":\"Criptography  6\","
    + "\"publisher\":\"Chapman\", \"year\":2010},"
    + "{\"author\":\"Hausi Muller\", \"id\":9,"
    + "\"name\":\"SelfAdaptiveSystem\","
    + "\"publisher\":\"UVic\", \"year\":2010}]";

Book[] books = gson.fromJson(data, Book[].class);
Arrays.asList(books).forEach(System.out::println);

而且效果很好。此外,我将books重命名为book,因为该类只表示一本书。

 类似资料:
  • 问题内容: 我有以下字符串: 如何使用Google / GSON将其转换为Java POJO? 问题答案: 通过使用http://www.jsonschema2pojo.org/或通过在Studio中添加插件(https://github.com/Hexara/Json2Pojo)生成POJO 现在添加依赖项: 将您的json或字符串转换为POJO

  • 问题内容: 我正在从返回JSON格式数据的服务器请求数据。发出请求时,将HashMap转换为JSON并不难,但另一种方式似乎有些棘手。JSON响应如下所示: 哪种方法最容易访问此数据?我正在使用GSON模块。 问题答案: 干得好:

  • 问题内容: 请建议如何将使用库转换为使用库。 我未成功执行的操作: 问题答案: 您无需使用。您应该使用Gson在JSON字符串和您自己的Java对象之间进行转换。 请参阅《Gson用户指南》: (序列化) (反序列化)

  • 问题内容: 我正在从返回JSON格式数据的服务器请求数据。发出请求时,将HashMap转换为JSON并不困难,但另一种方式似乎有些棘手。JSON响应如下所示: 哪种方法最容易访问此数据?我正在使用GSON模块。 问题答案:

  • 问题内容: 我在JS中有一个JSON对象,我想将其转换为字符串。这是功能吗? 提前致谢, 问题答案: JSON.stringify() 将值转换为JSON,如果指定了replacer函数,则可以选择替换值,如果指定了replacer数组,则可以选择仅包括指定的属性。

  • 我在编写从JSON字符串到对象列表的转换代码时遇到了Kotlin的问题。 类型不匹配。必需:键入!找到:()→单位 那么有没有解决办法让它为科特林工作呢?