IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
David Šabacký:24.5.2022 23:47

Zdravím,

mám multidimenzionální JSON object jménem ret a definici cesty, ale tu mám v proměnné. Jednoduše řečeno:

path = "navigation.courseOverGroundTrue.value"
console.log(ret.path)

bych byl rád, aby mi to vrátilo obsah proměnné.
takto to chodí

console.log(ret.navigation.courseOverGroundTrue.value)

ale ten multi klíč tahám z jiného JSON jako proměnnou, a tu dynamicky měním, takže to takto nemohu použít.

Prosil bych o pomoc, děkuji

David

Zkusil jsem: path = "[navigation][cou­rseOverGroundTru­e][value]"
a další modifikace, ale furt na to nemůžu přijít.

Chci docílit: Dynamicky číst path z JSON a vytahovat hodnoty.

 
Odpovědět
24.5.2022 23:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25.5.2022 7:58

Spatny zpusob je pouziti eval(). Protoze eval ti spusti nekontrolovatelne jakykoliv kod, coz miluji hackeri! Ani nevim, zda to jeste prohlizece podporuji.

path = "navigation.courseOverGroundTrue.value"
console.log( eval("ret."+path))

Ja osobne vypisuji do konzole cely json, pokud toho neni moc

console.log( JSON.stringify(ret) )

Ale, muzes to poskladat jako objekt (pripadne si udelej fukci s cyklem pro vypis).

path = [ "navigation", "courseOverGroundTrue", "value" ];
console.log( ret[ path[0] ][ path[1] ][ path[2] ] )
console.log( ret["navigation"]["courseOverGroundTrue"]["value"] )

A dal muzes zkusit google, treba je nove na to nejaka finta. Me znalosti jsou omezene tak na 20 let zpet.

 
Nahoru Odpovědět
25.5.2022 7:58
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2022 7:34
// tim cyklem by to slo mozna takto:
function pathApply(item, path)
{
path = path.split('.');
for (var i in path)
  { if (item[ path[i] ]) {item = item[path[i]];} }
return item;
}

path = "navigation.courseOverGroundTrue.value";
console.log(pathApply(ret, path));
Editováno 26.5.2022 7:35
 
Nahoru Odpovědět
26.5.2022 7:34
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2022 7:38
const isExist = (ref) => typeof ref!='undefined' && ref!=null;
...
if (isExist(item[ path[i] ])) {item = item[path[i]];} // tady bych mozna pouzil ifExist
 
Nahoru Odpovědět
26.5.2022 7:38
Avatar
Odpovídá na Peter Mlich
David Šabacký:26.5.2022 17:16

Zdravím, ten cyklus zabral ... jde o to, že já nevím kolik je vlastně těch klíčů, tedy jaká je hloubka.

Moc díky všem

David

 
Nahoru Odpovědět
26.5.2022 17:16
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 5 zpráv z 5.