Chen, myślę, że your answer jest poprawny.
Niektóre dalsze tło, które mogą być pomocne:
W JavaScript, który był oryginalny kontekst dla JSON, obiekt jest jak mapa hash łańcuchów do wartości, gdzie niektóre wartości są dane, inne funkcje.Każda para nazwa-wartość może być traktowana jako własność. Ale JavaScript nie ma klas, więc nazwy właściwości nie są predefiniowane, a każdy obiekt może mieć własny, niezależny zestaw właściwości.
JSON Schema używa słowa kluczowego properties
do sprawdzania par nazwa-wartość, które są znane z góry; i używa additionalProperties
(lub patternProperties
, nie obsługiwane w OpenAPI 2.0) do sprawdzania właściwości, które nie są znane.
Dla jasności:
- Nazwy własności lub "klucze" w mapie, muszą być łańcuchami. Nie mogą to być liczby ani żadna inna wartość.
- Jak już wspomniano, nazwy nieruchomości powinny być unikatowe w przypadku. Niestety specyfikacja JSON nie wymaga ściśle unikalności, ale unikalność jest zalecana i oczekiwana przez większość implementacji JSON. Więcej tła here.
properties
i additionalProperties
mogą być używane samodzielnie lub w połączeniu. Gdy dodatkowe właściwości są używane samodzielnie, bez właściwości, obiekt funkcjonuje zasadniczo jako map<string, T>
, gdzie T jest typem opisanym w pod-schemacie AdditionalProperties. Może to pomoże odpowiedzieć na twoje pierwotne pytanie.
- Podczas oceniania obiektu względem pojedynczego schematu, jeśli nazwa właściwości jest zgodna z jedną z tych określonych w
properties
, jej wartość musi być poprawna tylko względem podukładu podanego dla tej właściwości. Podprogram schematu additionalProperties
, jeśli jest dostępny, będzie używany tylko do sprawdzania właściwości, które nie są zawarte na mapie .
- Istnieją pewne ograniczenia związane z
additionalProperties
, które zostały wprowadzone w podstawowych bibliotekach Java oprogramowania Swagger. Udokumentowałem te ograniczenia here.
Epstien, chociaż twoja odpowiedź jest poprawna, nie jestem pewien, czy to odnosi się do pytania, z którym borykałem się: Jak to się stało, że 'additionalProperty' mapuje (kalambur nie jest przeznaczony) do słownika lub mapy. Także jeśli moja odpowiedź jest * głównie * poprawna, jest * nieco * niepoprawna, a ja nie zrozumiałem z twojej odpowiedzi, co jest w niej niepoprawne. –
Chen, dzięki za komentarze. Zaktualizowałem swoją odpowiedź, podając więcej szczegółów, które, mam nadzieję, będą pomocne dla Ciebie i innych czytelników. Głównym celem mojej odpowiedzi było dostarczenie dalszych informacji i opinii, a nie poprawienie odpowiedzi. Mam nadzieję, że mój trzeci punkt, wzięty w kontekście, odpowiada na twoje pierwotne pytanie (choć niekoniecznie lepsze niż twoja odpowiedź). –
Chen, w twojej odpowiedzi było tylko kilka punktów, które mogą nie być w 100% poprawne, a ja próbowałem odpowiedzieć na te w mojej odpowiedzi. (1) Gdzie odpowiedź brzmi "klucze (ich nazwy lub numery)", co sugeruje, że właściwości mogą używać wartości liczbowych jako kluczy. W rzeczywistości nazwy muszą być ciągami. (2) Gdzie powiedziałeś "additionalProperties będzie pasować do dowolnej nazwy nieruchomości" Może być oczywiste, ale pomyślałem, że powinienem zwrócić uwagę, że _właściwe nazwy właściwości zawarte pod słowem kluczowym 'properties'. –