NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Adam Gajdečka:28.9.2017 21:25

Ahoj, potřebuji z následujícího JSON souboru vytahat idečka, ale nevím jak. Snažil jsem se, ale brání mi v tom ta struktura, že je tam třeba 431: a někdy jiné číslo. Díky

{
  "request": {
    "Format": "json",
    "Version": "2",
    "fields": [
      "id"
    ],
    "filters": {
      "status": "active"
    },
    "_": "1506626360214"
  },
  "response": {
    "status": 1,
    "httpStatus": 200,
    "data": {
      "419": {
        "Offer": {
          "id": "419"
        }
      },
      "431": {
        "Offer": {
          "id": "431"
        }
      },
      "435": {
        "Offer": {
          "id": "435"
        }
      },
      "324": {
        "Offer": {
          "id": "324"
        }
      },
      "330": {
        "Offer": {
          "id": "330"
        }
      },
      "41": {
        "Offer": {
          "id": "41"
        }
      },
      "274": {
        "Offer": {
          "id": "274"
        }
      },
      "49": {
        "Offer": {
          "id": "49"
        }
      }
    },
    "errors": [],
    "errorMessage": null
  }
}
 
Odpovědět
28.9.2017 21:25
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Adam Gajdečka
Jan Vargovský:28.9.2017 23:04

Nejjednodušší řešení je asi tohle:

var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(json);
var offer = obj["response"]["data"]["431"];

Jestli si chceš více pohrát, tak vezmi ten json do paměti (ctrl+c) a ve VS to vlož jako json (ctrl+q a hledej "paste json"). To ti vygeneruje ale trošku bordel, nejlepší by bylo si dát ty data jako slovník, ale to by sis (asi) musel napsal nějaký converter.

 
Nahoru Odpovědět
28.9.2017 23:04
Avatar
Neaktivní uživatel:29.9.2017 0:26

Slo by to snad i takto:

JObject obj = Newtonsoft.Json­.JsonConvert.De­serializeObjec­t<JObject>(json);
var structure = obj.SelectToken("res­ponse.data").Va­lues().ToList();

List<string> ids = new List<string>(0);
structure.ForEach(w => ids.Add(w.Selec­tToken("Offer­.id").ToStrin­g()));

Vysledok je v ids. Kazdopadne, to len v pripade, ze si si isty, ze struktura jsonu sa ti nezmeni. Da sa s tym vyhrat.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.9.2017 0:26
Neaktivní uživatelský účet
Avatar
Jirka Jr
Člen
Avatar
Jirka Jr:29.9.2017 11:32

mala prasarnicka :-)

ale pokud neresis bezpecnost a format jsonu bude vzdy tak, jak uvadis, facha spolehlive

Regex pattern = new Regex("\"([0-9]+)\" *: *{");
MatchCollection matches = pattern.Matches(jsonString);
UInt32[] id = new UInt32[matches.Count];

for(int i=0;i<matches.Count;i++)
{
    id[i] = UInt32.Parse(matches[i].Groups[1].Value);
}

takto dostanes ty idcka jako cisla .. pokud staci stringy, neni treba ani to UInt32Parse samozrejme

 
Nahoru Odpovědět
29.9.2017 11:32
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Adam Gajdečka
vajkuba1234:29.9.2017 11:39

No a nebo si vytvor DTO, ktera koresponduji s JSONem a pomoci

Newtonsoft.Json.JsonConvert.DeserializeObject<DTO>(json);

si to narves do sveho citelneho objektu, ze ktereho to potom v pohode vytahnes pomoci LINQu.

Nahoru Odpovědět
29.9.2017 11:39
No hope, no future, JUST WAR!
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na vajkuba1234
Jan Vargovský:29.9.2017 15:34

Zkus to, ten slovník to trošku komplikuje :)

 
Nahoru Odpovědět
29.9.2017 15:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.