2014-12-23 3 views
0

я хотел бы преобразовать в Elegent образом этот вид строки:Синтаксический строка в словаре

"{lastname=Oba, firstname=Bar}"

к

var person = []; 
person["firstName"] = "Bar"; 
person["lastName"] = "Oba"; 

я пытаюсь с JSON синтаксического анализа, но не работает, я дон не знаю, как это сделать без грязного расщепления

+0

Это не [JSON] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON), поэтому почему JSON.parse не работает – epascarello

+0

Верхний элемент - это просто строка, это не JSON, поэтому почему JSON.parse не работает – TommyBs

+0

ОК это не JSON, но имеет ли он простой парсер? – gregouille

ответ

0

Этот код должен легко разобрать.

function myParser(str) { 
    return str.slice(1, -1).split(',').map(function(el) { 
     return el.trim() 
    }).map(function(el) { 
     return el.split('=') 
    }).reduce(function(result, pair) { 
     result[pair[0].trim()] = pair[1].trim(); 
     return result 
    }, {}); 
} 

Он будет работать, как ожидается, только для небольшой группы свойств и DATAS, но выяснить эти случаи и фиксацию, что поведение уезжают в качестве упражнения для читателя.

+0

whao действительно приятно, спасибо – gregouille

0

Алгоритм:
Разделение стринга г на , вы получите список A=B пар, а затем разделить каждую пару из списка = и словарной форме:

Python

s = "{lastname=Oba, firstname=Bar}" 

l = s[1:-1].split(",") 
d = {} 
for e in l: 
    a = e.split("=") 
    d[a[0].strip()] = a[1].strip() 

 

JavaScript

var s = "{lastname=Oba, firstname=Bar}"; 

var l = s.slice(1,-1).split(','); 
var d = {}; 
for (var i in l) { 
    var a = l[i].split('='); 
    d[a[0].trim()] = a[1].trim(); 
} 
Смежные вопросы