Конвертировать текстовые данные в объект JS

Рейтинг: 0Ответов: 1Опубликовано: 05.02.2015

Здравствуйте!

Есть следующий текст:

connect.host="192.0.0"
connect.user="root"
base.pass="12345"
log = 20

Нужно сделать объект вида:

 {
   "connect":{
         "host":"192.0.0",
         "user":"root"
         },
   "base":{
        "pass":"12345"
        },
    "log":"20"
}

Текст может меняться каждый раз. Код который начал писать:

    var data = $('#data').text(),
    elements = data.trim().split(" ");

for(i=0;i<elements.length;i++){
    var pair = elements[i].split('='),
        properties = pair[0], //[0]'connect.host'//[1] connect.user..
        value = pair[1];    //[0]"192.0.0"//[1] root ....
    createObj(properties, value); 
}

var object = {};

function createObj(properties, value){

  for(i=0;i<properties.length;i++){

  }

}

Как правильно сбить это все в один объект?

Ответы

▲ 2Принят
var content = "...text..".trim().split("\n");

for(var i=0, obj = {}; i < content.length; i++) {
    var split_full = content[i].split("=");
    var s_dotted = split_full[0].split(".");

    for(k=1, json_string = '', json_string_end = ''; k < s_dotted.length; k++) {
        json_string += '{"' +s_dotted[k].trim() + '":';
        json_string_end += "}";
    }

    json_string += split_full[1].trim() + json_string_end;

    obj[s_dotted[0]] = MergeRecursive(JSON.parse(json_string), obj[s_dotted[0]]);
}

function MergeRecursive(obj1, obj2) {
    for (var p in obj2) {
        try {
            obj1[p] =  ( obj2[p].constructor==Object ) ? MergeRecursive(obj1[p], obj2[p]) : obj1[p] = obj2[p];
        } catch(e) {
            obj1[p] = obj2[p];
        }
    }
    return obj1;
}

console.log(obj);

А если используем jQuery, то функцию MergeRecursive() убираем и

obj[s_dotted[0]] = MergeRecursive(JSON.parse(json_string), obj[s_dotted[0]]);

заменяем на:

obj[s_dotted[0]] = $.extend({}, JSON.parse(json_string), obj[s_dotted[0]]);