Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как изменить значение JSON ? (https://javascript.ru/forum/misc/13501-kak-izmenit-znachenie-json.html)

нечто 01.12.2010 04:23

Как изменить значение JSON ?
 
Всем привет!

Имею JSON массив типа этого:
data = { "1": { "qq": "ww", "ee": "rr" }, "2": { "qq2": "ww3", "ee4": "rr5" } }


И надо поменять одно из значений одного под-массива.
Пробую:
jsondata["1"]["ww"] = "new value!";

jsondata["1"].ww = "new value!";

setData("1.ww", "new value!");


Любой из этих 3 способ ставит значение "new value!" не только у элемента "ww" из под-массива "1", но и у всех остальных элементов "ww"!

Что я делаю не так? :help:



Функция setData:
function setData(key, val, obj)
	{
		if (!obj) obj = data; //outside (non-recursive) call, use "data" as our base object
		var ka = key.split(/\./); //split the key by the dots
		if (ka.length < 2)
		{
			obj[ka[0]] = val; //only one part (no dots) in key, just set value
		}
		else
		{
			if (!obj[ka[0]]) obj[ka[0]] = {}; //create our "new" base obj if it doesn't exist
			obj = obj[ka.shift()]; //remove the new "base" obj from string array, and hold actual object for recursive call
			setData(ka.join("."),val,obj); //join the remaining parts back up with dots, and recursively set data on our new "base" obj
		}
	}

нечто 01.12.2010 18:10

Оказывается, дело в том что я копировал так:
Цитата:

data[new_id] = data[id];
А надо так:
Цитата:

data[new_id] = JSON.parse(JSON.stringify(data[id]));


Часовой пояс GMT +3, время: 10:25.