| 
	| 
	
	| 
		
	| 
			
			 
			
				22.11.2017, 16:30
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.03.2010 
						Сообщений: 194
					 
		
 |  |  
	| 
				Вопросы по многомерным 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". Но нет. Почему? 
Спасибо. |  |  
	| 
		
	| 
			
			 
			
				22.11.2017, 16:40
			
			
			
		 |  
	| 
		
			|  | CacheVar       |  | 
					Регистрация: 19.08.2010 
						Сообщений: 14,298
					 
		
 |  |  
	| 
	
 
	| Сообщение от dima85 |  
	| Так я получаю alert с "success" |  
	
 А я получаю
 
	
 
	| Цитата: |  
	| Uncaught ReferenceError: str is not defined |  
	
   
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);
 |  |  
	| 
		
	| 
			
			 
			
				22.11.2017, 16:54
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 04.12.2012 
						Сообщений: 3,841
					 
		
 |  |  
	| 
	
 
	| Сообщение от dima85 |  
	| id = "country.name"; По идеи я должен получить "United States". Но нет. Почему?
 |  
	
 Потому что у jsonArray нет ключа "country.name", но есть ключ "country", у которого есть ключ "name".
 
Можно написать функцию, которая будет возвращать вам необходимый результат, но, по-моему, здесь и без нее спокойно можно обойтись. |  |  
	| 
		
	| 
			
			 
			
				22.11.2017, 16:59
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 04.12.2012 
						Сообщений: 3,841
					 
		
 |  |  
	| 
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
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| dima85,
  
str = str.replace(new RegExp('('+id+')','g'), eval("srcJson."+id));
 |  |  
	| 
		
	| 
			
			 
			
				22.11.2017, 18:22
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.03.2010 
						Сообщений: 194
					 
		
 |  |  
	| Nexus спасибо.рони, как всегда шикарное решение. Спасибо!
 |  |  
	| 
		
	| 
			
			 
			
				15.01.2019, 15:57
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.03.2010 
						Сообщений: 194
					 
		
 |  |  
	| @рони, подскажите как это сделать без учета регистра? 
Пробовал добавить i но не помогло.
 
str = str.replace(new RegExp('('+id+')','gi'), eval("srcJson."+id));
 |  |  
	| 
		
	| 
			
			 
			
				15.01.2019, 17:08
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| 
	
 
	| Сообщение от 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);
 |  |  
	| 
		
	| 
			
			 
			
				15.01.2019, 17:30
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.03.2010 
						Сообщений: 194
					 
		
 |  |  
	| Извиняюсь, вот пример: В 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
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| dima85,RegExp тут не причём, меняйте алгоритм, ключ обьекта регистрозависим.
 |  |  |  |