Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JSON] Modyfikacja 1 gałęzi
tadeurz
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


  1. var tab = {
  2. 'michal':{klasa:6,opis:{wzrost:189,waga:86}},
  3. 'magda':{klasa:6,opis:{wzrost:190,waga:86}},
  4. 'maciek':{klasa:6,opis:{wzrost:189,waga:86}},
  5. 'marcin':{klasa:6,opis:{wzrost:189,waga:86}}
  6. };
  7.  
  8. function update(id,key,value){
  9. var data = JSON.parse(localStorage.getItem(id));
  10. data[key] = value;
  11. localStorage.setItem(id,JSON.stringify(data));
  12. };

jeżeli chciałbym wymienić całą gałąź 'michal':
  1. var name = 'michal';
  2. var newdata = {klasa:5,opis:{wzrost:100,waga:100}};
  3. update(tab,name,newdata);

i to działa w 100%
problem pojawia się gdy chce wymienić tylko dalszą gałąź:
czyli tylko dane opisu 'michal.opis':
  1. var name = 'michal';
  2. var newdata = {wzrost:100,waga:100};
  3. update(tab,name.opis,newdata);

zamiast zmodyfikować michal.opis tworzy mi nowa gałąź ->"undefined":{wzrost:100,waga:100}.

Jeżeli zrobię tak:(prześle key jako STRING):
  1. var name = 'michal';
  2. var newdata = {wzrost:100,waga:100};
  3. update(tab,'name.opis',newdata);

tworzy mi nowa gałąź: ->"name.opis":{wzrost:100,waga:100}.

Coś jest nie tak z przesłaniem zmiennej 'key', nie wiem jak to poprawić. Problem tkwi w mojej niewiedzy na temat drzew JSON, nie potrafię go rozwiązać.
Jak zmodyfikować funkcje update żeby móc zmieniać dalsze gałęzie ?

-----------------------------------------------------------------------------------------------------

Dla potomnych.

Rozwiązałem swój problem. Funkcja dalej jest niedoskonała, ale pozwala modyfikować o 1 gałąź dalej.
Jedynym rozwiązaniem jest dodanie pętli for() z -> key.length żeby sprawdzić ile index'ów jeszcze mamy. Czego nie chce robić (IMG:style_emoticons/default/exclamation.gif)

  1. function update(id,key,value){
  2. if(localStorage.getItem(id)){
  3. var data = JSON.parse(localStorage.getItem(id));
  4. if(key.indexOf('.')>= 0){
  5. key = key.split('.');
  6. data[eval(key[0])][key[1]] = value;
  7. }else{ data[key] = value;}
  8. localStorage.setItem(id,JSON.stringify(data));
  9. }
  10. }


Ten post edytował tadeurz 3.12.2012, 12:47:38
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:23