java - 无法从 [Source : java. io.StringReader@505fd738; 处的 START_OBJECT token 反序列化 java.util.ArrayList 实例;行 : 1, 列:1]

标签 java

我在进行反序列化时遇到错误。

我有一个 URL,并且通过使用 sb 变量中的以下代码从该 URL 获取 JSON 数据,但如何使用此代码反序列化它?

我的 JSON 数据是:

 { "status": "success",
   "msg": [
            { "fav_food": "roti",
              "user_name": "123",
              "email": "123@gmail.com" },
            { "fav_food": "iii",
              "user_name": "343",
              "email": "234@gmail.co" },
            { "fav_food": "paneer",
              "user_name": "343",
              "email": "343@gmail.com"}
          ]
 }

代码:

package com.pack;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream; 
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@SuppressWarnings("serial")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Collection_to_jacksonJsonServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws 
IOException {
    resp.setContentType("text/html");
    PrintWriter out=resp.getWriter();

    Map<String,Directory> contacts=new HashMap<String,Directory>();

    ObjectMapper ob=new ObjectMapper();
    List<Data> l=new ArrayList<Data>();
    URL url=new URL("https://api-demo-py.appspot.com/getAllUsers");
    HttpURLConnection request = (HttpURLConnection) url.openConnection();
    request.connect();
    StringBuilder sb=new StringBuilder();
    BufferedReader br=new BufferedReader(new 
    InputStreamReader(request.getInputStream()));
    String line;
    try
    {
        //read from the urlConnection via the bufferedReader
      while ((line = br.readLine()) != null)
      {
        sb.append(line);
      }
      br.close();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

    System.out.println(sb);
    String jsonString=sb.toString();
    l= ob.readValue(jsonString,new TypeReference<List<Data>>(){});

  } 
}

最佳答案

那么你必须反序列化为以下对象:

class Wrapper {
    public String status;
    public List<Data> msg;
}

关于java - 无法从 [Source : java. io.StringReader@505fd738; 处的 START_OBJECT token 反序列化 java.util.ArrayList 实例;行 : 1, 列:1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876278/

相关文章:

java - 如果连接重新启动,则重新连接到数据库

java - takePicture 因堆相关错误而失败

java - 使用多线程写入单个文件

java - Java中的计算问题

java - 使用变量在 Groovy 中定义映射

java - Gradle 下载不需要的依赖项

java - 必须阅读有关 Java 线程的文章

java - JEdi​​torPane 的奇怪行为

java - Spring Cloud Contract - 如何在 .yaml 文件中传递 "+"(加号)作为查询参数

Java:提供所选列的摘要统计信息的代码示例