Czym są te formaty danych?

Programy zapisują i wymieniają ustrukturyzowane dane, takie jak ustawienia, rekordy i listy, w formatach tekstowych, z których każdy zapisuje je na swój sposób. Konwerter przydaje się, gdy jeden program udostępnia dane w formacie, którego inny program nie odczytuje, albo gdy dany format łatwiej odczytać lub edytować na potrzeby konkretnego zadania.

Format Sposób zapisu danych Gdzie można go spotkać
JSON Obiekty w nawiasach klamrowych, listy w nawiasach kwadratowych, tekst w cudzysłowach API internetowe i ustawienia aplikacji
YAML Wiersze key: value z wcięciami, elementy listy zaczynające się od - Pliki Docker Compose, Kubernetes i potoków CI
XML Elementy w tagach, które mogą mieć atrybuty Dokumenty, kanały RSS i usługi internetowe SOAP
TOML Wiersze key = value pod nagłówkami [table] Pliki konfiguracyjne, takie jak Cargo.toml i pyproject.toml
TOON Wiersze z wcięciami, listy rekordów zapisane w wierszach pod ich polami Ustrukturyzowane dane wysyłane do modeli językowych AI
CSV Wiersz nagłówka, a następnie jeden wiersz na rekord, wartości oddzielone przecinkami Arkusze kalkulacyjne i eksporty baz danych
TSV Podobnie jak CSV, ale wartości są oddzielone tabulatorami Komórki skopiowane z arkusza kalkulacyjnego
MessagePack Dane binarne, przedstawione tutaj jako bajty szesnastkowe Kompaktowe komunikaty między programami
JSON5 JSON, który dopuszcza również komentarze, apostrofy i klucze bez cudzysłowów Ręcznie edytowane pliki konfiguracyjne
JSONL Jedna wartość JSON w każdym wierszu, znana również jako JSON Lines lub NDJSON Dzienniki i zbiory danych
INI Wiersze key = value pod nagłówkami [section] Pliki ustawień programów, takie jak php.ini
Properties Wiersze key = value z kluczami rozdzielanymi kropkami Aplikacje Java, takie jak pliki application.properties w Spring Boot

Opis narzędzia

To narzędzie konwertuje dane między tymi 12 formatami: JSON, YAML, XML, TOML, TOON, CSV, TSV, MessagePack, JSON5, JSONL, INI i Java properties. Wszystkie dostępne tutaj konwertery formatów danych działają tak samo — zarówno ogólny konwerter formatów danych, jak i konwertery dla pojedynczych par, na przykład JSON na YAML, CSV na JSON czy XML na JSON. Po otwarciu wybrane są formaty wskazane w nazwie narzędzia, a menu Źródło i Cel pozwalają wybrać dowolne inne. Wklej lub wpisz dane, a wynik będzie wyświetlany na bieżąco w edytorze kodu z podświetlaniem składni i będzie gotowy do skopiowania. Przycisk zamiany odwraca kierunek konwersji i ustawia wynik jako nowe dane wejściowe.

Jeśli dane wejściowe są nieprawidłowe w formacie źródłowym, komunikat o błędzie wyjaśnia, co jest nie tak, zwykle podając wiersz i kolumnę, w których występuje problem.

Dane są konwertowane w przeglądarce i nigdy nie są przesyłane na serwer.

Przykład

Ten JSON:

{
  "users": [
    { "id": 1, "name": "Ann", "admin": true },
    { "id": 2, "name": "Bo", "admin": false }
  ]
}

zmienia się w taki YAML:

users:
  - id: 1
    name: Ann
    admin: true
  - id: 2
    name: Bo
    admin: false

w taki CSV, z jednym wierszem na użytkownika:

id,name,admin
1,Ann,true
2,Bo,false

oraz w taki TOON:

users[2]{id,name,admin}:
  1,Ann,true
  2,Bo,false

Jak poszczególne formaty odwzorowują dane

Nie wszystkie formaty mogą przechowywać te same rodzaje danych, dlatego niektóre konwersje podlegają następującym zasadom:

  • CSV i TSV przechowują tabelę. Pierwszy wiersz zawiera nazwy kolumn, a każdy kolejny wiersz staje się obiektem. Zagnieżdżone obiekty stają się kolumnami o nazwach odpowiadających ich ścieżkom, a listy są zapisywane w komórkach jako tekst JSON. Na przykład {"name": "Ann", "address": {"city": "Oslo"}, "tags": ["a", "b"]} zmienia się w kolumny name, address.city i tags. Po konwersji w drugą stronę te kolumny ponownie stają się zagnieżdżonymi obiektami i listami. Gdy dane są obiektem zawierającym jedną listę, na przykład {"users": [...]}, wiersze odpowiadają elementom tej listy, a lista list staje się wierszami bez nagłówka.
  • Wartości tekstowe: CSV, TSV, XML, INI i properties przechowują wyłącznie tekst, dlatego konwertery zamieniają true i false na wartości logiczne true i false, a liczby zapisane w prostym formacie, takie jak 42 lub 3.5, na liczby. Wartości takie jak 007, 1.50 czy 1e3 pozostają tekstem, dzięki czemu kody pocztowe i numery wersji zachowują dokładny zapis.
  • Atrybuty XML stają się kluczami zaczynającymi się od @, a tekst elementu zawierającego atrybuty staje się wartością #text: <price currency="USD">44.95</price> zmienia się w {"@currency": "USD", "#text": 44.95}. Powtarzające się elementy stają się listą. Podczas konwersji do XML klucze zaczynające się od @ ponownie stają się atrybutami. Obiekt z jednym kluczem, którego wartość nie jest listą, staje się elementem głównym. Pozostałe dane są umieszczane w elemencie <root>, a każdy element listy znajdującej się na najwyższym poziomie — w elemencie <item>. Znaki niedozwolone w nazwach XML, takie jak spacje, są zastępowane znakiem _.
  • TOML, INI i properties mogą przechowywać na najwyższym poziomie wyłącznie nazwane wartości, dlatego dane będące listą są zapisywane pod nazwą items, a pojedyncza wartość — pod nazwą value. TOML nie obsługuje wartości null, dlatego są one pomijane.
  • INI zapisuje zagnieżdżone obiekty jako sekcje, takie jak [server.ssl], listy wartości jako wiersze key[] = value, a listy obiektów jako sekcje nazwane według ich pozycji, takie jak [users.0].
  • Klucze w properties łączą zagnieżdżone nazwy kropkami, a elementy list numerują w nawiasach kwadratowych, na przykład app.hosts[0], zgodnie ze sposobem zapisu stosowanym przez Spring Boot. Po konwersji do YAML lub JSON takie klucze stają się zagnieżdżonymi obiektami i listami, więc plik application.properties zostaje przekształcony do układu pliku application.yml. Znaki spoza zestawu Latin-1 są zapisywane jako sekwencje ucieczki \u.
  • Wyniki YAML ujmują w cudzysłów tekst, który czytniki YAML 1.1 zinterpretowałyby inaczej, na przykład on, yes lub datę, dzięki czemu czytniki YAML 1.1 i YAML 1.2 otrzymują te same dane. Plik YAML zawierający kilka dokumentów rozdzielonych przez --- staje się ich listą, a klucze scalania << są rozwijane.
  • MessagePack jest formatem binarnym, dlatego narzędzia odczytują go i zapisują jako bajty szesnastkowe: {"a": 1} to 81 A1 61 01. Dane wejściowe mogą zawierać spacje, przecinki i prefiks 0x przed każdym bajtem. Kilka komunikatów zapisanych jeden po drugim staje się listą.
  • Wyniki JSONL zawierają każdy element listy w osobnym wierszu.
  • Liczby całkowite zbyt duże, by można je było zapisać jako liczby JavaScript, takie jak identyfikatory 64-bitowe, zachowują wszystkie cyfry.
  • Daty i godziny TOML oraz znaczniki czasu MessagePack stają się tekstem, na przykład 1979-05-27T07:32:00Z.

Wskazówki

  • Aby przekonwertować komórki z arkusza kalkulacyjnego, skopiuj je i wklej jako TSV: aplikacje arkuszy kalkulacyjnych kopiują komórki jako tekst rozdzielony tabulatorami.
  • CSV i TSV sprawdzają się w przypadku danych będących listą podobnych rekordów. Dane o głębokim zagnieżdżeniu łatwiej odczytać w formacie YAML, TOML lub TOON.
  • Komentarze w plikach YAML, XML, TOML, JSON5, INI i properties nie są zachowywane, ponieważ konwertery przenoszą wyłącznie dane.