[Resio]VC++ ucitavanje JSON podataka

[Resio]VC++ ucitavanje JSON podataka

offline
  • Pridružio: 15 Maj 2009
  • Poruke: 963

Napisano: 25 Jun 2017 14:45
Pravim Form Application u VS2012 C++.
Imam neke podatke u json fajlovima i treba da ih ucitam.
{   "id1": {     "key1": "val11",     "key2": [       "it11",       "it12"     ]   },   "id2": {     "key1": "val21",     "key2": [       "it21"     ]   } }
Voleo bih da podacima mogu da pristupam na sledeci nacin:
//pseudokod String^ key = "id1"; return root[key]->key1;
Naleteo sam na pojam 'deserijalizacija' i izgleda da je to najbolje uraditi.
JSON.Net na koji sam prvo naleteo nece da se instalira bez nove verzije NuGet-a a ona izgleda nece u VS2012.
Video sam da ima i ugradjenih klasa za ovo, poput DataContractJsonSerializer, i jednostavnije mi je da njih koristim.

Nemam iskustva sa ovim, pa moze neko da mi napise kako treba da izgleda kod?

Ono sto sam ja napisao i sta normalno nije ispravno:
ref class Element { public:   String^ key1;   List<String^> key2; }; [DataContract] ref class Root { public:   [DataMember]Dictionary<String^, Element^> objects; }; //... FileStream^ stream = File::OpenRead(file); DataContractJsonSerializer^ ser = gcnew DataContractJsonSerializer(Root::typeid); Root^ root = (Root^)ser->ReadObject(stream);
Dopuna: 25 Jun 2017 18:21
Mozda sam trebao da napomenem da JSON ne mora da bude bas tog formata (mada bi voleo da je tako).

Uspeo sam da deserijalizujem niz objekata
[   {     "id": "id1",     "key1": "val11",     "key2": [       "it11",       "it12"     ]   },   {     "id": "id2": {     "key1": "val21",     "key2": [       "it21"     ]   } ]
I onda imamo
[DataContract] ref class Element { public:   [DataMember] String^ id;   [DataMember] String^ key1;   [DataMember] List<String^>^ key2; }; //... DataContractJsonSerializer^ ser = gcnew DataContractJsonSerializer(List<Element^>::typeid); List<Element^>^ list = (List<Element^>^)ser->ReadObject(stream);
Na zalost, sad ne mogu da radim list[key]->key1 vec bi morao da iterisem celu listu da nadjem neki kljuc, mada izgleda da moze i to da se sredi: https://stackoverflow.com/questions/7635969/list-t.....using-linq



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

JSON.Net sam ja jednom prilikom koristio i radio je baš to što ti tražiš, a lak je za upotrebu. Ako ne možeš da gavpreuzmeš preko NuGet-a, uvek možeš da preuzmeš direktno dll (verujem da imaju neki svoj sajt/blog/šta god) i referenciraš ga.



Ko je trenutno na forumu
 

Ukupno su 1027 korisnika na forumu :: 7 registrovanih, 1 sakriven i 1019 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: DejanSt, DonRumataEstorski, ILGromovnik, Kriglord, mane123, nemkea71, RED4G-304