gpt4 book ai didi

java - JSON元素从单个变为列表

转载 作者:行者123 更新时间:2023-12-01 09:54:51 24 4
gpt4 key购买 nike

我正在使用 Java Spring 和 Jackson 来使用来自合作伙伴 Web 服务的 JSON 数据,但我遇到了一个难以克服的挑战。问题是有时我需要消耗的数据包含特定类型的单个元素,有时数据包含这些元素的完整列表(如果我在这里没有使用正确的 JSON 术语,请原谅我)。例如:

{
"number": "12121212",
"activity": { "status": "in transit", "date": "20100429" }
}

这包含一个“Activity ”元素。然后在下一个示例中,有一个“activity”元素列表:

{
"number": "12121212",
"activity": [{ "status": "arrived", "date": "20160430" }, { "status": "in transit", "date": "20160429" }, { "status": "shipping", "date": "20160429"}]
}

我正在使用 com.fasterxml.jackson.databind.ObjectMapper 将 JSON 映射到 java bean,这是我的两个 bean:

public class Activity {
private String status;
private String date;

/* getters and setters */
}

public class Message {
private String number;
private Activity activity;

/* getters and setters */
}

我的调用代码是这样的:

public static void main(String[] args) {
Messages m = new Messages();
String jsonMessage = getJsonMessage(); // This gets the JSON message to be run through ObjectMapper
ObjectMapper mapper = new ObjectMapper();

try {
Message message = mapper.readValue(jsonMessage, Message.class);
} catch (Exception e) {
e.printStackTrace();
}
} // end method main()

当我在接收带有单个“activity”元素的 JSON 消息的同时执行此代码时,它会起作用。当使用“activity”元素列表执行它时,出现以下错误:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.graybar.utilities.parsejson.Activity out of START_ARRAY token

将消息 bean 更改为以下内容可以使代码在处理“Activity ”元素列表时正常工作:

public class Message {
private String number;
private ArrayList<Activity> activity;

/* getters and setters */
}

但是,现在代码无法使用单个“activity”元素。我收到以下错误:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

我必须想象有一种简单的方法来处理 Jackson 框架中元素的单个实例或列表实例,但不幸的是我无法找到它。

感谢任何帮助!

-史蒂芬·斯伯丁

最佳答案

@varren 提供了上面的链接,帮助我找到了解决方案。我将以下代码行添加到我的调用方法中:

mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 

所以,完整的方法如下所示:

public static void main(String[] args) {
Messages m = new Messages();
String jsonMessage = getJsonMessage(); // This gets the JSON message to be run through ObjectMapper
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); /* this is the fix */

try {
Message message = mapper.readValue(jsonMessage, Message.class);
} catch (Exception e) {
e.printStackTrace();
}
} // end method main()

关于java - JSON元素从单个变为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37331653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com