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,228
|
|
Сообщение от 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,795
|
|
Сообщение от dima85
|
id = "country.name";
По идеи я должен получить "United States". Но нет. Почему?
|
Потому что у jsonArray нет ключа "country.name", но есть ключ "country", у которого есть ключ "name".
Можно написать функцию, которая будет возвращать вам необходимый результат, но, по-моему, здесь и без нее спокойно можно обойтись.
|
|
22.11.2017, 16:59
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
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,126
|
|
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,126
|
|
Сообщение от 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,126
|
|
dima85,
RegExp тут не причём, меняйте алгоритм, ключ обьекта регистрозависим.
|
|
|
|