[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: 14248
  • 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 820 korisnika na forumu :: 64 registrovanih, 7 sakrivenih i 749 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 2413 - dana 03 Okt 2019 05:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 8u47, _commandos_, _Petar, A.R.Chafee.Jr., aljosa7, amonsrb, baza, bojan313, Bov80, BraneS2, darcaud, darkstar101, djonsule, dolinalima, Dorcolac, dule10savic, flash12, FOX2, francis begbie, Gama, Georgius2, Japidson, Kubovac, Kule, M1los, majorgaspar, MarKhan, markodri031, milos.cbr, milos_ts, mirbat, MORAVA1, nradukic, olga 2, Pakito93, panticstefan53, pein, powSrb, prle122, Radovan Vinčić, raykan, renoje2, repac, Roman, rovac, sale755, sasa.zoric, sawa2, shone34, slavcokoskata, Stija zmija, USSVoyager, VaRvArI 85, Veber Zoltan, vespa nikola, Viceroy2, vladas87, vlvl, vukovi, wizzardone, Wrangler, Zmaj 99, znaisha, zoidbergs