Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.11.2017, 16:30
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 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". Но нет. Почему?
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 22.11.2017, 16:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Сообщение от 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);
Ответить с цитированием
  #3 (permalink)  
Старый 22.11.2017, 16:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Сообщение от dima85
id = "country.name";
По идеи я должен получить "United States". Но нет. Почему?
Потому что у jsonArray нет ключа "country.name", но есть ключ "country", у которого есть ключ "name".

Можно написать функцию, которая будет возвращать вам необходимый результат, но, по-моему, здесь и без нее спокойно можно обойтись.
Ответить с цитированием
  #4 (permalink)  
Старый 22.11.2017, 16:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

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));
Ответить с цитированием
  #5 (permalink)  
Старый 22.11.2017, 17:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

dima85,
str = str.replace(new RegExp('('+id+')','g'), eval("srcJson."+id));
Ответить с цитированием
  #6 (permalink)  
Старый 22.11.2017, 18:22
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Nexus спасибо.
рони, как всегда шикарное решение. Спасибо!
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2019, 15:57
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

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

str = str.replace(new RegExp('('+id+')','gi'), eval("srcJson."+id));
Ответить с цитированием
  #8 (permalink)  
Старый 15.01.2019, 17:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от 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);
Ответить с цитированием
  #9 (permalink)  
Старый 15.01.2019, 17:30
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 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);
Ответить с цитированием
  #10 (permalink)  
Старый 15.01.2019, 18:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
json slider вопросы S-27 jQuery 11 31.01.2014 15:26
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10
JSON основы вопросы mycoding Общие вопросы Javascript 9 12.04.2010 19:59