2015-04-27 1 views
0

у меня есть сериализовать массив как этотКак преобразовать значение массива сериализации в JSON в JavaScript

rate_3=26&rate_8=67&rate_12=98 и т.д ..,

Теперь мне нужно изменить этот массив как тип JSon

{ 
     "ID": "3", 
     "Rate": "26" 
    }, 
    { 
     "ID": "8", 
     "Rate": "67" 
    }, 
    { 
     "ID": "3", 
     "Rate": "26" 
    } .., 
    etc 

так я пробовал, как это, но его не работает ... пожалуйста, кто-нибудь мне поможет.

 var o = {}; 
     var a = table.$('input, select').serialize(); 
     $.each(a, function() 
     { 
     if (o[this.name] !== undefined) 
      { 
      if (!o[this.name].push) 
       { 
        o[this.name] = [o[this.name]]; 
       } 
       o[this.name].push(this.value || ''); 
      } 
     else 
      { 
       o[this.name] = this.value || ''; 
      } 
     }); 
     return o; 

им с помощью DataTable, так что я просто нужно получить DataTables сериализовать массив только что использовал эту линию

var a = table.$('input, select').serialize();

даже я пытался с json2.js также, но когда я использую json2.js оно заставляя страницу представить

var data_2 = JSON.stringify(block_form.serializeArray()); 
+2

'это, но его не работает' - Что на самом деле происходит и что на самом деле ожидается? – thefourtheye

+0

Функция '.serialize' возвращает строку, а не массив. Таким образом, вы не можете «видеть» его и ожидать, что он будет работать. Не знаете, почему вы используете '.serialize' в первую очередь, когда кажется, что проще всего построить объект, который вам нужен, из выбранных опций. –

ответ

1

Если формат данных надежно в формате rate_N=X&, вы можете использовать простые строки расщеплению на р ослабить значения. Это похоже на то, как строки запроса отформатированы, и, если это так, вы не должны сталкиваться с (m) любыми необычными объектами.

Во-первых, вы захотите разбить каждую пару ключей и ключей (на &). Затем разделите каждую пару на =, чтобы получить ключ и значение. Вам нужно будет разобрать идентификатор из ключа (вырезать rate_ с фронта), который будет работать нормально.

var data = "rate_3=26&rate_8=67&rate_12=98"; 
 

 
var pairs = data.split('&').reduce(function(collect, pair) { 
 
    var kv = pair.split('='); 
 
    var name = kv[0].substr(kv[0].indexOf('_') + 1); 
 
    collect.push({ 
 
    id: name, 
 
    rate: kv[1] 
 
    }); 
 
    return collect; 
 
}, []); 
 

 
document.getElementById('results').textContent = JSON.stringify(pairs);
<pre id="results"></pre>

+0

awesome это то, что именно я хочу :) спасибо много – Munna

0

http://jsfiddle.net/43hnftaf/

var str = 'rate_3=26&rate_8=67&rate_12=98' 
var arr = str.split('&').map(function(element) { 
    return element.replace(/^rate_/, ''); 
}).map(function(element) { 
    var elements = element.split('='); 
    return { 
     "ID" : elements[0], 
     "Rate" : elements[1] 
    }; 
}); 
console.log(arr); 
2

Простой метод заключается в map по итогам матча регулярного выражения, выдвигая новые объекты в результирующем массиве:

var out = str.match(/\d+=\d+/g).map(function (el) { 
    var arr = el.split('='); 
    return { id: arr[0], rate: arr[1] }; 
}); 

DEMO

Преобразование выходного массива в JSON с помощью JSON.stringify(out).

+1

Wow that's sweet. – garryp