java mkyong JsonProperty가 때때로 배열이고 때로는 단일 개체일 때 Jackson이 비소합니다.



java json serialize deserialize (1)

DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY 를 활성화하면

{"result": []}

{"result": {}} 는 다음과 같이 구문 분석 될 수 있습니다.

class Result{
   List result;
}

문서 링크

JSON 값이 아닌 배열을 강제로 Java 컬렉션 (배열, java.util.Collection) 유형과 함께 작동하도록 허용 할 수 있는지 여부를 결정하는 기능입니다. 이 옵션을 활성화하면 컬렉션 디시리얼라이저는 JSON 배열을 둘러싼 "암시 적"것처럼 비 배열 값을 처리하려고합니다. 이 기능은 호환성 / 상호 운용성 이유로 인해 배열에 요소가 하나만있는 경우 JSON 배열을 사용하지 않는 패키지 (예 : XML-to-JSON 변환기)를 사용하기위한 것입니다. 기능은 기본적으로 사용되지 않습니다.

OP 입력 jsons 및 POJO에이를 사용하는 방법을 데모하십시오.

ObjectMapper mapper = new ObjectMapper()
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
Result result = mapper.readValue(Result.class;

어떤 이유로 든 매퍼 버전이 마음에 들지 않으면 클래스 나 필드 위의 @JsonFormat 과 함께 사용할 수 있습니다.

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)

추신. 이 문제에 대한 기타 문의 사항 : LINK

게시하기 전에 Stack Overflow를 검색했지만 Jackson에게는 해결책이 없습니다.

다음은 서버 응답입니다.

{
  "ok": true,
  "result": [
    {
      "update_id": 489881731,
      //rest 
    },
    {
      "update_id": 489881732,
      //rest
    }
  ]
}

보시다시피 속성 "result" 는 배열입니다.

이제 이것은 또 다른 응답입니다.

{
  "ok": true,
  "result": {
    "id": 211948704,
    "first_name": "ربات ادمین‌های تلگرام",
    "username": "tgAdminsBot"
  }
}

여기서 "result" 는 하나의 객체입니다.

이 클래스는 컨텐츠를 비 직렬화하고 싶습니다. 물론 TObject 에 대한 사용자 지정 디시리얼라이저 를 작성했습니다.

public class Result
{
    private TObject[] result;
    private boolean ok;

    public void setOk (boolean ok) {//code}

    public void setResult (TObject[] result) {//code}


    public TObject[] getResult () {//code}

    public boolean getOk (){//code}
}

그래서 저는 " result"TObject 의 배열이라고 생각했습니다. 이제 어떻게해야합니까? @JsonProperty("result") 를 하나의 TObject 배열과 하나의 TObject 배열 인 두 필드에 사용하고 있습니까?

내가 뭘 할 수 있을까요?





jackson-modules