2015-12-19 2 views
2

У меня есть это неправильно JSon строку:Преобразование неправильно строку JSON в JSON массив

({ВХ '(49,150892549035454, +9,22825813293457)', shopName: 'Объект_проверки', NameID: '1', APid: 'Loa', пол: 'male'}); ({loc: '(12.150892549035454, 12.22825813293457)', shopName: 'OtestRe', nameID: '1', apID: 'Loaa', пол: 'female'});

Так что теперь я пытался исправить строку:

 var res = this.markerlist.replace(/\)|\(/g, ''); 
     var res2 = res.replace(/;/g, ','); 
     var jsonList = JSON.stringify('[' + res2 + ']'; 

[{цит: '(49,150892549035454, +9,22825813293457)', shopName: 'Объект_проверки', NameID: '1', APid : 'Loa', пол: 'male'}, ({loc: '(12.150892549035454, 12.22825813293457)', shopName: 'OtestRe', nameID: '1', apID: 'Loaa', пол: 'female'}]

Затем я попытаюсь разобрать его:

var jsonRs = JSON.parse(jsonList); 


    for (var rowData in jsonRs) // for acts as a foreach 
    { 
     console.log(jsonRs[rowData]); 

    } 

И я получаю каждый символ, как выход, как:

4 
9 
. 
1 

И так далее.

+1

http://jsonlint.com/ –

+0

Вы должны использовать JSON.parse не JSON.stringify. – jcubic

+0

Вы не должны перебирать массив с 'for ... in', но с' for (var i = 0; i LoremIpsum

ответ

4

Хотя, как и все предлагалось, знание формата важно для решения вашей проблемы. Таким образом, ваш подход к замене & является неправильным. & ошибка.

Ваш Json string на самом деле javascript ... Так что даже eval может работать.

EDIT: Как отметил Biwise Creative, ему потребуется немного лечения:

this.markerlist.split(";").slice(0,-1).map(function(t) {return eval(t);}) 
+0

Это не сработает с его строкой как есть, так как есть несколько объектов. Он получит единый объект со значениями последнего набора данных. Вам все равно нужно разбить и форматировать строковые массивы данных. –

+0

true .. обновленный мой ответ. Надеюсь, это так? – loxxy

+0

Да, и довольно гладкий тоже. https://jsfiddle.net/7dsxsdwc/ +1 –

1

Вы можете разобрать свой вход, как это:

var input = "({loc: '(49.150892549035454, 9.22825813293457)' , shopName: 'Otest', nameID: '1', apID: 'Loa', gender: 'male'}); ({loc: '(12.150892549035454, 12.22825813293457)' , shopName: 'OtestRe', nameID: '1', apID: 'Loaa', gender: 'female'});"; 

var result = input 
      .split(";") // spliting ';' for each object 
      .slice(0, -1) // removing last portion after ';' 
      .map(function(item) { 
       var cleaned = item 
        .trim() // removing white spaces from the ends 
        .slice(1, -1) // getting rid of() 
        .replace(/'/g, '"') // replacing ' to " 
        .replace(/(\w+):/g, '"$1":'); // surrounding word before ':' with double quotes 
       return JSON.parse(cleaned); 
      }); 

console.log(result); 
0

Вот еще одна версия с loc собственности в качестве массива, чтобы вы могли использовать lattitude ang longitude

var markerlist = "({loc: '(49.150892549035454, 9.22825813293457)' , shopName: 'Otest', nameID: '1', apID: 'Loa', gender: 'male'}); ({loc: '(12.150892549035454, 12.22825813293457)' , shopName: 'OtestRe', nameID: '1', apID: 'Loaa', gender: 'female'});"; 

    var arStr = markerlist.split(";"); 
    var jsons = []; 

    for(var i=0;i < arStr.length;i++){ 
      var o = eval(arStr[i]); 
        if(o){ 
          o.loc = o.loc 
            .replace(/\(|\)/g, "") 
            .split(','); 
          jsons.push(o); 
        } 
    } 
    console.log(jsons); 
Смежные вопросы