【问题标题】:Extracting data from keys in JSON Object从 JSON 对象中的键中提取数据
【发布时间】:2021-09-04 09:08:32
【问题描述】:

我收到了这样的回复

[
   
      {
         "externalId1":"NULL",
         "externalId2":"NULL"
      }
   ,
   
      {
         "externalId1":"NULL",
         "externalId2":"NULL"
      }
   
]

并且此响应存储在List<String> 变量名response1 中。

我想提取 externalId1 和 externalId2 的值并将其存储在 List 中

我写的代码如下:

//response1是存放response数组的list,上面已经写好了response数组。

但是,在执行此操作后,异常来了,因为它不是 JSONObject。该循环不会提取所需的数据。理想情况下,externalId1 和 externalId2 这两个键的值都应该被打印出来。但是循环不断给出异常,因此说“NOT JSONObject”。

List<String> response1 = new ArrayList<String>();
JSONArray jsonArray = new JSONArray(response1);

for (int i=0; i<array.length(); i++)
{
  JSONObject object = jsonArray.getJSONObject(i);
  System.out.println(object.getString("externalId1");
  System.out.println(object.getString("externalId2");
}

编辑:根据 stackoverflow 上少数用户的反馈,我修改了通过在我的机器中更改代码得到的响应。

【问题讨论】:

  • 您的 JSON 示例中有一个 array of array
  • 在 JSON 中:[ ] 代表列表/数组,{ } 代表对象。像[ [ { } ] ] 这样的结构是包含包含对象的数组的数组。我不知道你从哪里得到List&lt;String&gt;...
  • 是的,响应来自数据库,我将累积响应存储在字符串列表中,现在我需要提取每个键的数据
  • 只需添加额外的操作,先获取内部数组,然后提取其中的对象
  • 感谢 Gael J,我现在已经修改了响应本身,现在它是一个包含对象的单个数组,并且存储在 List 类型中,然后我做了与描述中相同的代码但我无法提取信息

标签: java json spring-boot


【解决方案1】:

在我看来, 最好的方法是你必须实现 DTO 类。例如:

public class ExternalId {
   private String externalId1;
   private String externalId2;
}

@PostMapping("/test")
public void parseJsonExample(@RequestBody List<List<ExternalId>> requestBody) {
  //do whatever you want on your list objects
}

【讨论】:

  • 不需要 DTO,但因为我必须将键值迁移到另一个位置,在那里我将构建一个新的响应。
猜你喜欢
  • 2021-03-10
  • 2019-02-05
  • 2016-12-24
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多