gpt4 book ai didi

java - 如何使用Java Jersey处理不确定的Json

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

我今天从一位同事那里收到了这个问题。假设我们有一个像这样的 Json 字符串:

{people:{name:Carlos}}

所以我有一个简单的类来处理这个 Json 字符串,它看起来像这样:

@XmlRootElement
class PeopleHandler(){

public Person people;

}

有时 Json 字符串会提供一个人员列表,如下所示:

{people:[{name:Carlos}, {name:Michel}]}

我的问题是:如何更改 PeopleHandler 类来管理此类输入,是否有任何注释可以提供帮助?

注意:主要问题是我可以接收此处示例的任何 Json 字符串。所以我的类必须能够支持两者。

注 2:我无法控制输入,它是由网络服务提供的。我知道只要有一个对象,我就可以检查 Json 并使用列表构建一个副本,但我一直在寻找更优雅的解决方案。

最佳答案

您可以使用JsonDeserialize来做到这一点注释和加法解串器。
PeopleHandler.java

public class PeopleHandler 
{
private List<Person> people;

@JsonDeserialize(using = PersonDeserializer.class)
public void setPeople(List<Person> o)
{
people = o;
}

}

PersonDeserializer.java

public class PersonDeserializer extends JsonDeserializer<List<Person>>
{
@Override
public List<Person> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException
{
List<Person> retVal = new ArrayList<Person>();
if (jp.getCurrentToken() == JsonToken.START_OBJECT)
{
retVal.add(jp.readValueAs(Person.class));
}
else if (jp.getCurrentToken() == JsonToken.START_ARRAY)
{
while (jp.nextToken() == JsonToken.START_OBJECT)
{
retVal.add(jp.readValueAs(Person.class));
}
}

return retVal;
}
}

关于java - 如何使用Java Jersey处理不确定的Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24002602/

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