Добавление ответа Мэтта для нескольких хостов.
пример ввода будет 192.0.2.10,192.0.2.11
- hosts: localhost
gather_facts: no
vars_prompt:
- name: target_host
prompt: please enter the target host IP
private: no
tasks:
- add_host:
name: "{{ item }}"
groups: dynamically_created_hosts
with_items: "{{ target_host.split(',') }}"
- hosts: dynamically_created_hosts
tasks:
- debug: msg="do things on target host here"
Почему именно вам нужно JSON.parse
здесь? Изменение примера массивов
str = str.split(', ');
var result = {};
for (var i = 0; i < str.length; i++) {
var cur = str[i].split('=');
result[cur[0]] = cur[1];
}
edit Пример , чтобы убедить вас.
Для массива a
, содержащего вашу промежуточную форму:
[['foo', 'bar'], ['baz', 'quux']]
, а затем просто:
var obj = {};
for (var i = 0; i < a.length; ++i) {
var tmp = a[i];
obj[tmp[0]] = tmp[1];
}
{'foo,bar': ['baz', 'quux']}
.
– nyuszika7h
18 February 2011 в 23:51
tmp
вместо a
в последней строке.
– Alnitak
18 February 2011 в 23:52
Я поклонник метода Джона Ресига «Поиск и не заменяю» для этого типа:
var str = 'foo=bar, baz=quux',
arr = [],
res = '{';
str.replace(/([^\s,=]+)=([^,]+)(?=,|$)/g, function ($0, key, value) {
arr.push('"' + key + '":"' + value + '"');
});
res += arr.join(",") + "}";
alert(res);
Рабочий пример: http://jsfiddle.net/cm6MT/ .
Делает вещи намного проще без необходимости поддержки JSON. Конечно, так же легко использовать одно и то же регулярное выражение с exec()
или match()
.
Упс, я думал, что вы хотите преобразовать строку JSON, а не объект. В этом случае вам нужно немного изменить код:
var str = 'foo=bar, baz=quux',
res = {};
str.replace(/([^\s,=]+)=([^,]+)(?=,|$)/g, function ($0, key, value) {
res[key] = value;
});
console.log(res.foo);
//-> "bar"
Рабочий пример 2: http://jsfiddle.net/cm6MT/1/
Чтобы преобразовать его в объект, просто сделайте это с самого начала:
var obj = {};
str = str.split(', ');
for (var i = 0; i < str.length; i++) {
var tmp = str[i].split('=');
obj[tmp[0]] = tmp[1];
}
Затем, если вы хотите, чтобы JSON вышел из него:
var jsonString = JSON.stringify(obj);
анализирует файлы cookie в одной строке (IE9 +):
document.cookie.split('; ').reduce(function(result, v, i, a) { var k = v.split('='); result[k[0]] = k[1]; return result; }, {})
Альтернативная версия вашего обновленного решения, которая проверяет строку null / empty и просто возвращает пустой объект, а также позволяет настраивать разделители.
function stringToObject(str, delimiter) {
var result = {};
if (str && str.length > 0) {
str = str.split(delimiter || ',');
for (var i = 0; i < str.length; i++) {
var cur = str[i].split('=');
result[cur[0]] = cur[1];
}
}
return result;
}
document.cookie.split('; ').reduce((prev, current) => {
const [name, value] = current.split('=');
prev[name] = value;
return prev
}, {});
['foo=bar', 'baz=quux']
, но мне нужен объект . – nyuszika7h 18 February 2011 в 23:48result['foo']
в массиве. – Nikita Rybak 18 February 2011 в 23:49result
. Благодаря! – nyuszika7h 18 February 2011 в 23:53