Я бы действительно советовал не инкапсулировать данные в json, а затем помещать их в хеш.
Причина в том, что сам JSON нуждается в большом количестве разметки и на самом деле откроет некоторые дыры в безопасности, так как вам придется позже проверять код, который приходит непосредственно от пользователя.
В качестве лучшей альтернативы я бы посоветовал использовать x-www-form-urlencoded в качестве инкапсуляции. Например, если это ваш объект состояния:
var stateObject = {
userName: 'John Doe',
age: 31
}
Тогда вы создадите фрагмент хеша, подобный этому:
// Create an array to build the output string.
var hashPartBuffer = [];
for (var k in stateObject) {
hashPartBuffer.push(
encodeURIComponent(k),
'=',
encodeURIComponent(stateObject[k]),
'&');
}
if (hashPartBuffer.length) {
// Remove the last element from the string buffer
// which is '&'.
hashPartBuffer.pop();
}
var hashPartString = hashPartBuffer.join('');
// This will now be 'userName=John%20Doe&age=31'
Тогда вы проанализируете это обратно:
var hashPartString = 'userName=John%20Doe&age=31';
var pairs = hashPartString.split(/&/);
var stateObject = {};
for (var i = 0; i < pairs.length; i++) {
var keyValue = pairs.split(/=/);
// Validate that this has the right structure.
if (keyValue.length == 2) {
stateObject[keyValue[0]] = keyValue[1];
}
}