2012-02-28 3 views
4

Я хочу, чтобы цикл был как пары ключ/значение. Данные передаются мне как строка (я использую плагин jstorage).Как закодировать строку как пары значений ключа

Я попытался разделить строку как массив, но не возвращает правильную клавишу/значения.

Пример

"color":"#000000", "font":"12px", "background":"#ffffff", 
+0

возможно дубликат [Безопасное превращение строки JSON в объект] (http://stackoverflow.com/questions/45015/safely -turning-a-json-string-in-an-object) –

+2

Итак, у вас есть строка типа «цвет»: «# 000000», «font»: «12px», «background»: «# ffffff», «'? – biziclop

+1

jStorage позволяет хранить произвольные объекты как значения, поэтому вы не должны находиться в этом положении для начала. Вы должны изменить свое предложение «Данные переданы мне как строка», чтобы «____ дает мне данные как строку», а затем исправить все, что угодно ____! – ruakh

ответ

7

Если вы всегда получите строку, как это, то есть ключи и значения в двойных кавычках, вы можете добавить {...} в строку и parse it as JSON:

// remove trailing comma, it's not valid JSON 
var obj = JSON.parse('{' + str.replace(/,\s*$/, '') + '}'); 

Если нет, то расщепление строка также проста, считая, что , и : не могут встречаться в ключах или значениях:

var obj = {}, 
    parts = str.replace(/^\s+|,\s*$/g, '').split(','); 

for(var i = 0, len = parts.length; i < len; i++) { 
    var match = parts[i].match(/^\s*"?([^":]*)"?\s*:\s*"?([^"]*)\s*$/); 
    obj[match[1]] = match[2]; 
} 
+0

Спасибо, это именно то, что я ищу всю ночь. – user759235

0

Вам необходимо оценить его в объекте JavaScript. При условии, вы доверяете источнику, или может подтвердить содержание, вы можете сделать это:

s = document.createElement('script') 
s.type='text/javascript'; 
s.innerHTML = 'var data = {'+ text + '}'; 
document.getElementsByTagName('head')[0].appendChild(s); 
Смежные вопросы