# Json Objekt leeres Array beim lesen



## OnDemand (15. Jan 2020)

Hallo zusammen,

ich habe eine externe API angebunden, die mir ein leeres Array gibt, wenn die "Unit" nicht hinterlegt ist.
Wenn ich aber eine Unit übertragen will, muss ich ein Objekt senden, kein Array.

Kann mir jemand sagen wie ich damit umgehen kann? Wenn ich eine List mache, bekomme ich beim lesen keinen Fehler wenn UNIT leer ist. Mach ich aber keine List, bekomme ich (im Falle dass Unit null ist) eine Fehlermeldung.

Hier mal die json:
Unit ist nicht hinterlegt, die API sendet:

```
"unit": [],
     "unit_price": {...
```

Wenn ich aber eine unit hinterlegen will, muss ich wie folgt senden:

```
"unit": {
        "name": "meinName",
    },
    "unit_price": {....
```




```
@JsonProperty("unit")
private List<Unit> unitList =new ArrayList<>();

@JsonProperty("unit")
private  Unit unit;
```


----------



## mrBrown (15. Jan 2020)

NicoDeluxe hat gesagt.:


> ich habe eine externe API angebunden, die mir ein leeres Array gibt, wenn die "Unit" nicht hinterlegt ist.
> Wenn ich aber eine Unit übertragen will, muss ich ein Objekt senden, kein Array.


Das eine Schema wird beim Senden benutzt, das andere Schema beim Empfangen?

Dann einfach passende DTOs für beide Fälle


----------



## OnDemand (15. Jan 2020)

Öh ja  wie recht du hast  danke! Ich denke zu 98% zu kompliziert  Danke und einen schönen Abend


----------



## OnDemand (15. Jan 2020)

Hm hab doch nochmal was hierzu. Es kann nun sein, dass UNIT leer ist (dann kommt leeres Array) oder aber es ist nicht leer, dann kommt das Objekt als nicht Array. Wie kann ich das nun handlen?


----------



## mrBrown (15. Jan 2020)

NicoDeluxe hat gesagt.:


> Hm hab doch nochmal was hierzu. Es kann nun sein, dass UNIT leer ist (dann kommt leeres Array) oder aber es ist nicht leer, dann kommt das Objekt als nicht Array. Wie kann ich das nun handlen?


Ein Request kann entweder `{"unit": []}` oder `{"unit": {"xyz":42}}` zurückgeben?


----------



## OnDemand (15. Jan 2020)

korrekt


----------



## mrBrown (15. Jan 2020)

https://stackoverflow.com/a/8305643 geht in die Richtung


----------



## OnDemand (15. Jan 2020)

Geht schon mal in dir richtige Richtung, aber eine einfache Annotation gibts nich :/


----------



## thecain (15. Jan 2020)

Ich denke nicht, ist ja auch "falsch" generiert


----------



## OnDemand (15. Jan 2020)

bin auch der Meinung, dass die API das falsch ausgibt. Ruf morgen beim Anbieter an, sonst mach ich es wie folgt.Sollte klappen


```
ObjectMapper mapper = new ObjectMapper();
            mapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);

            List<MyObject> myObjects = mapper.readValue(response.getBody(), new TypeReference<List<MyObject>>() {
            });
```


----------

