Json.NET – obsługa plików JSON w C#
Zdarza się, że w naszym programie musimy odczytać dane, które dostajemy w formacie JSON, np. od jakiegoś zewnętrznego serwisu. Jeśli mamy za dużo czasu zaczynamy pisać własny parser, a chcąc po prostu skończyć projekt sięgamy bo odpowiednią bibliotekę. Ja znalazłem Json.NET, która od razu przypadła mi do gustu ponieważ pozwoliła zrobić to co potrzebuję, czyli odczytać dane z pliku JSON, w prosty i skuteczny sposób. Dodatkowym plusem jest wsparcie dla Linq. Można ją pobrać albo z oficjalnej strony na Codeplex, albo przez manager pakietów NuGet, wtedy należy szukać pod nazwą Newtonsoft.Json. Sama biblioteka poza prostym odczytywaniem wartości pozwala też serializować i deserializować .NETowe obiekty do formatu JSON.
Dzisiaj pokażę podstawową funkcjonalność, tj. zwykłe odczytanie konkretnej wartości z pliku JSON.
Załóżmy, że odebraliśmy taki plik zapisany w formacie JSON:
{ "name":"Marek", "website": "zajacmarek.com", "random_data" : [ "text1", "text2" ] }
I chcemy odczytać z niego imię i drugi tekst z tablicy random_data. Nic prostszego. Json.NET pozwala to zrobić w kilku linijkach, z czego większość jest tylko przypisaniem odczytanej wartości, samo parsowanie sprowadza się do wywołania jednej funkcji. Cały program wypisujący interesujące nas wartości wygląda tak:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace JsonSample { class Test { static void Main(string[] args) { string data; // ... tutaj odbieramy string pokazany wczesniej // i zapisujemy go do zmiennej data ... JObject jsonObject = JObject.Parse(data); Console.WriteLine("Name: "+ jsonObject["name"]); Console.WriteLine("Text: " + jsonObject["random_data"][1]); Console.ReadLine(); } } }
Zakładamy, że w zmiennej data mamy już zapisany pokazany wcześniej tekst w formacie JSON. Aby go sparsować do postaci, która pozwoli łatwo odczytać dane wystarczy wywołać statyczną funkcję Parse() klasy JObject. Potem już odczytywanie wartości sprowadza się do użycia na obiekcie zwróconym przez funkcję Parse() operatora [] z kluczem w postaci nazwy JSONowego obiektu lub indeksem (zależnie czy odwołujemy się do obiektu czy elementu tablicy). I tyle. Na ekranie zobaczymy wypisane imię „Marek” i tekst „text2″.
To tylko mały fragment tego co udostępnia biblioteka. Chciałem tutaj jedynie powiedzieć o jej istnieniu i pokazać jak w prosty sposób pozwala wykonać podstawowe operacje, czyli odczytanie wartości dla konkretnego klucza, podczas pracy z JSON. Po więcej odsyłam do strony projektu, ewentualnie można zostawić pytania w komentarzu, na Facebooku albo wysłać mailem ;)
Dzień dobry,
czy mógłby mi Pan pomoc jak odszyfrować taki kod w jsonie(poniżej), chodzi mi o dane np.” id” czy „krs_podmioty.data_wyrejestrowania_przedsiebiorcy”
{„Dataobject”:[{„id”:”10681″,”dataset”:”krs_podmioty”,”url”:”https:\/\/api-v3.mojepanstwo.pl\/dane\/krs_podmioty\/10681″,”mp_url”:”https:\/\/mojepanstwo.pl\/dane\/krs_podmioty\/10681″,”schema_url”:”https:\/\/api-v3.mojepanstwo.pl\/schemas\/dane\/krs_podmioty.json”,”global_id”:”3158082″,”slug”:”orange-polska”,”score”:null,”data”:{„krs_podmioty.data_wyrejestrowania_przedsiebiorcy”:null,”krs_podmioty.data_wykreslenia_stowarzyszenia”:null,”krs_podmioty.data_sprawdzenia”:”2018-09-03T12:25:33″,”krs_podmioty.adres_lokal”:””,”krs_podmioty.adres_miejscowosc”:”Warszawa”,”krs_podmioty.liczba_czlonkow_komitetu_zal”:”0″,”krs_podmioty.regon”:”12100784″,”krs_podmioty.akcept”:”1″,”krs_podmioty.forma_prawna_typ_id”:”1″,”krs_podmioty.liczba_zmian_umow”:”0″,”krs_podmioty.siedziba”:”kraj POLSKA, woj. MAZOWIECKIE, powiat M. ST. WARSZAWA, gmina M. ST. WARSZAWA, miejsc. WARSZAWA”,”krs_podmioty.wartosc_kapital_zakladowy”:3937072437,”krs_podmioty.rejestr_stowarzyszen”:”0″,”krs_podmioty.nazwa”:”ORANGE POLSKA SP\u00d3\u0141KA AKCYJNA”,”krs_podmioty.adres_kod_pocztowy”:”02-326″,”krs_podmioty.empty”:”0″,”krs_podmioty.nip”:”5260250995″,”krs_podmioty.liczba_prokurentow”:”0″,”krs_podmioty.nieprzedsiebiorca”:”0″,”krs_podmioty.www”:””,”krs_podmioty.forma_prawna_str”:”SP\u00d3\u0141KA AKCYJNA”,”krs_podmioty.nazwa_organu_reprezentacji”:”ZARZ\u0104D SP\u00d3\u0141KI”,”krs_podmioty.wczesniejsza_rejestracja_str”:”RHB 29979 S\u0104D REJONOWY DLA M.ST. WARSZAWY”,”krs_podmioty.adres”:”ul. AL. JEROZOLIMSKIE, nr 160, lok. —, miejsc. WARSZAWA, kod 02-326, poczta WARSZAWA, kraj POLSKA”,”krs_podmioty.id”:”10681″,”krs_podmioty.liczba_akcji_wszystkich_emisji”:”1312357479″,”krs_podmioty.dotacje_ue_beneficjent_id”:”0″,”krs_podmioty.person_id”:[„8211″,”8212″,”15211″,”15212″,”109403″,”244228″,”542337″,”554962″,”959351″,”1187507″],”krs_podmioty.liczba_emisji_akcji”:”0″,”krs_podmioty.twitter_account_id”:”0″,”krs_podmioty.data_dokonania_wpisu”:”2018-07-06″,”krs_podmioty.nazwa_organu_nadzoru”:””,”krs_podmioty.wartosc_czesc_kapitalu_wplaconego”:3937072437,”krs_podmioty.rejestr”:”1″,”krs_podmioty.wartosc_nominalna_podwyzszenia_kapitalu”:21339000,”krs_podmioty.data_rejestracji_przedsiebiorcy”:”2001-05-02″,”krs_podmioty.firma”:”ORANGE POLSKA SP\u00d3\u0141KA AKCYJNA”,”krs_podmioty.opp”:”0″,”krs_podmioty.gpw”:true,”krs_podmioty.liczba_dzialalnosci”:”0″,”krs_podmioty.numer_wpisu”:”78″,”krs_podmioty.file_id”:”81241060″,”krs_podmioty.deleted_on_request”:”0″,”krs_podmioty.adres_ulica”:”Al. Jerozolimskie”,”krs_podmioty.liczba_jedynych_akcjonariuszy”:”0″,”krs_podmioty.data_rejestracji_stowarzyszenia”:null,”krs_podmioty.liczba_nadzorcow”:”0″,”krs_podmioty.sposob_reprezentacji”:”PREZES \u0141\u0104CZNIE Z CZ\u0141ONKIEM ZARZ\u0104DU”,”krs_podmioty.wykreslony”:”0″,”krs_podmioty.gmina_id”:”2226″,”krs_podmioty.wojewodztwo_id”:”7″,”krs_podmioty.liczba_zmian”:”28″,”krs_podmioty.sygnatura_akt”:”WA.XII NS-REJ.KRS\/40724\/18\/6″,”krs_podmioty.liczba_wspolnikow”:”0″,”krs_podmioty.cel_dzialania”:null,”krs_podmioty.nazwa_skrocona”:”ORANGE POLSKA”,”krs_podmioty.data_ostatni_wpis”:”2014-05-15″,”krs_podmioty.liczba_reprezentantow”:”0″,”krs_podmioty.email”:””,”krs_podmioty.adres_poczta”:”Warszawa”,”krs_podmioty.kod_pocztowy_id”:”15848″,”krs_podmioty.data_wpisu_opp”:null,”krs_podmioty.wartosc_kapital_docelowy”:0,”krs_podmioty.adres_numer”:”160″,”krs_podmioty.powiat_id”:”335″,”krs_podmioty.adres_kraj”:”Polska”,”krs_podmioty.wartosc_nominalna_akcji”:3,”krs_podmioty.gpw_spolka_id”:”384″,”krs_podmioty.miejscowosc_id”:”16239″,”krs_podmioty.knf_ostrzezenie_id”:”0″,”krs_podmioty.krs”:”0000010681″,”krs_podmioty.data_zawieszenia_dzialanosci”:null,”krs_podmioty.data_rejestracji”:”2001-05-02″,”krs_podmioty.ostatni_wpis_id”:”891900″,”krs_podmioty.data_uprawomocnienia_wykreslenia”:null,”krs_podmioty.forma_prawna_id”:”10″,”krs_podmioty.liczba_oddzialow”:”0″,”krs_podmioty.data_wznowienia_dzialanosci”:null,”krs_podmioty.umowa_spolki_cywilnej”:”0″,”krs_podmioty.oznaczenie_sadu”:”S\u0104D REJONOWY DLA M. ST. WARSZAWY W WARSZAWIE, XII WYDZIA\u0141 GOSPODARCZY KRAJOWEGO REJESTRU S\u0104DOWEGO”}}],”Count”:1,”Took”:8,”Links”:{„self”:”https:\/\/api-v3.mojepanstwo.pl\/dane\/krs_podmioty.json?conditions%5Bkrs_podmioty.nip%5D=5260250995&_type=objects”}}