Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вопросы по многомерным JSON - замена (https://javascript.ru/forum/dom-window/71487-voprosy-po-mnogomernym-json-zamena.html)

dima85 22.11.2017 16:30

Вопросы по многомерным JSON - замена
 
srcJson = {"status":"success","ip":"70.84.83.22","ip_version":"ipv4","country":{"alpha-2":"US","alpha-3":"USA","name":"United States","phone":"1"},"continent":{"code":"NA","name":"North America"}}

id = "status";
str = str.replace(new RegExp('('+id+')','g'), srcJson[id]);

alert(str);


Так я получаю alert с "success"

А если
id = "country.name";
По идеи я должен получить "United States". Но нет. Почему?
Спасибо.

ksa 22.11.2017 16:40

Цитата:

Сообщение от dima85
Так я получаю alert с "success"

А я получаю
Цитата:

Uncaught ReferenceError: str is not defined
:cray:

srcJson = {"status":"success","ip":"70.84.83.22","ip_version":"ipv4","country":{"alpha-2":"US","alpha-3":"USA","name":"United States","phone":"1"},"continent":{"code":"NA","name":"North America"}}
id = "status";
str = str.replace(new RegExp('('+id+')','g'), srcJson[id]);
alert(str);

Nexus 22.11.2017 16:54

Цитата:

Сообщение от dima85
id = "country.name";
По идеи я должен получить "United States". Но нет. Почему?

Потому что у jsonArray нет ключа "country.name", но есть ключ "country", у которого есть ключ "name".

Можно написать функцию, которая будет возвращать вам необходимый результат, но, по-моему, здесь и без нее спокойно можно обойтись.

Nexus 22.11.2017 16:59

var obj={a:{b:'c'}},
	key='a.b.c',
	get_object_property_by_key=function(object,key){
		if(typeof object!='object')
			return object;
		
		key=key.split('.');
		for(var i=0;i<key.length;i++){
			if(!object[key[i]])
				return object;
			else
				object=object[key[i]];
		};
			
		return object;
	};
	
	alert(get_object_property_by_key(obj,key));

рони 22.11.2017 17:06

dima85,
str = str.replace(new RegExp('('+id+')','g'), eval("srcJson."+id));

dima85 22.11.2017 18:22

Nexus спасибо.
рони, как всегда шикарное решение. Спасибо!

dima85 15.01.2019 15:57

@рони, подскажите как это сделать без учета регистра?
Пробовал добавить i но не помогло.

str = str.replace(new RegExp('('+id+')','gi'), eval("srcJson."+id));

рони 15.01.2019 17:08

Цитата:

Сообщение от dima85
Пробовал добавить i но не помогло.

где пример неработающего кода?
srcJson = {"status":"success","ip":"70.84.83.22","ip_version":"ipv4","country":{"alpha-2":"US","alpha-3":"USA","name":"United States","phone":"1"},"continent":{"code":"NA","name":"North America"}}
str = "Status test"
id = "status";
str = str.replace(new RegExp('('+id+')','gi'), eval("srcJson."+id));
alert(str);

dima85 15.01.2019 17:30

Извиняюсь, вот пример: В srcJson мы имеем IP большими буквами, в других местах с маленькими.

srcJson = {"status":"success","IP":"70.84.83.22","ip_version":"ipv4"}
str = "test ip test"
id = "ip";
str = str.replace(new RegExp('('+id+')','gi'), eval("srcJson."+id));
alert(str);

рони 15.01.2019 18:44

dima85,
RegExp тут не причём, меняйте алгоритм, ключ обьекта регистрозависим.


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