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

将只有“行”和“列”的JSON响应解析到POJO

阳凌
2023-03-14

是否可以解析对POJO的JSON响应,即使响应只发回行和列?

我从API得到这个响应:

{
"rows": [
[
  "FIRST NATIONAL BANK OF OMAHA",
  36644,
  "COM",
  44527,
  198809,
  "SH",
  -1.5631,
  "Put",
  "2019-09-30"
],
[
  "WAYNE HUMMER INVESTMENTS L.L.C.",
  49096,
  "COM",
  17975,
  90817,
  "SH",
  2.8971,
  "Put",
  "2019-06-30"
]
],
"columns": [
"Institution Name",
"Institution CIK",
"Class of Security Held",
"Value of Security Held",
"Volume of Security Held",
"Type of Security Held",
"Quarterly Change in Security Held",
"Put/Call",
"Report Date"
]
}

这是我正在使用的代码,为简洁起见,将其缩短,以连接到API并获得JSON响应,我使用Gson通过反序列化器类传递JSON响应:

public static void requestResponse(){

   URL apiURL = new URL("http://apilink.com/api/getSomething.json?T=gnbuweiogh9y89234y&symbol=GOOG");

   String readLine = null;

   HttpConnection apiConnection =  (HttpConnection) apiURL.openConnection();

   apiConnection.setRequestMethod("GET");

   int responseCode = apiConnection.getResponseCode();

   if(responseCode == HttpConnection.HTTP_OK) {

       BufferedReader in = new BufferedReader(new InputStreamReader(apiConnection.getInputStream()));

       StringBuffer response = new StringBuffer();

       while((readLine = in.readLine()) != null) {
           response.append(readLine);
       }
       in.close();

       String jsonResponse = response.toString();

       Deserializer deSerializer = new Gson().fromJson(jsonResponse, Deserializer .class);
       List<String> columns = deSerializer.getColumns;
       // Do something with the data
   }
}

这是我制作的反序列化类:

public class deSerializer {

@SerializedName("rows")
@Expose
private List<List<String>> rows = null;
@SerializedName("columns")
@Expose
private List<String> columns = null;

public List<List<String>> getRows() {
return rows;
}

public void setRows(List<List<String>> rows) {
this.rows = rows;
}

public List<String> getColumns() {
return columns;
} 

public void setColumns(List<String> columns) {
this.columns = columns;
}

}

我希望JSON响应采用这种格式,这会使序列化更简单:

{
 "data": [{
"Institution Name": "FIRST NATIONAL BANK OF OMAHA",
"Institution CIK": 36644,
"Class of Security Held": "COM",
"Value of Security Held": 44527
 } ]
}

抱歉发了这么长的帖子,但是反序列化POJO响应的最佳方法是什么?

多谢了。

共有1个答案

翟英达
2023-03-14

通过向反序列化器添加以下帮助器方法,可以将其转换为所需的格式:

public List<Map<String, Object>> asListOfMaps() {
    List<Map<String, Object>> list = new ArrayList<>(this.rows.size());
    for (List<Object> data : this.rows) {
        Map<String, Object> row = new LinkedHashMap<>(this.columns.size());
        for (int i = 0; i < this.columns.size(); i++)
            row.put(this.columns.get(i), data.get(i));
        list.add(row);
    }
    return list;
}
 类似资料:
  • 下面是我在点击特定Web服务时收到的JSON响应: 我不知道哪个索引有我的期望值(我需要在确定哪个具有)后验证多个值),这是动态的。不希望使用硬编码值。并匹配,因为这将在下次更改。 对此我有两个问题: 如何将响应传递给java代码并获取具有的数组索引,以便使用此索引进行验证? 下面的代码不起作用。

  • 其答复如下: 我相信问题出在响应前面的jsonFlickrApi上。 执行以下代码时: }

  • 问题内容: 这是我对Web服务的JSONArray响应: 这是ApiInterface.java 这是方法和响应的调用: 到目前为止,它失败了,这里是logcat输出: 它无法执行响应。指导我分析此响应。 问题答案: 请尝试使用这个 如果您遇到任何问题,请告诉我。

  • 问题内容: 我试图从下面的curl输出中获取说“ ip”的值: 我在互联网上发现了许多示例来解析curl请求的json输出,并且编写了以下代码,但这似乎并没有给我说“ ip”的值 如果有人可以向我提示我需要添加到代码中以获得“ ip”值的提示,我将不胜感激。 问题答案: 您可以创建结构来模仿json结构,然后对json进行解码。 输出为: 通过将其解码为一个结构,您可以循环遍历任何切片,而不会局限

  • 问题内容: 我正在尝试从FlickR解析JSON响应,但是遇到了困难。我已经进行了一些测试,并且收到200的响应代码,并且能够使用日志记录拦截器查看实际的JSON。 但是,当我尝试访问JSON对象时,我收到了一个空指针。我觉得这与我的映射/ JSON到POJO有关: 相片: 照片: JSON响应: LOGCAT 72行 问题答案: 您的课程不适合服务器 响应, 因此您的身体为 Null 。您的模型

  • 问题内容: 我正在使用CURL发送请求。响应数据类型为。如何解析此数据并将其插入数据库? JSON输出: 问题答案: 如果您的变量是字符串json之类的,则必须使用function将其解析为 对象 或 数组 : 输出值 现在,您可以将变量作为数组使用: 参考文献: json_decode -PHP手册