#javascript #arrays #json
#javascript #массивы #json
Вопрос:
Я написал следующий код Javascript. Это лучшее, что я мог сделать, чтобы мои данные были отформатированы как допустимый JSON:
var roles = getSelectedRoles(); // returns an Array object
/* TODO: Find a better way to get the roles into my JSON data */
var rolesString = '["' roles[0] '"';
if (roles.length > 1)
for (var i = 1; i < roles.length; i )
rolesString = ',"' roles[i] '"';
rolesString = ']';
var lid = $('#lid').val();
var json = '{ "id": "' lid '", "roles":' rolesString '}';
Как вы можете видеть, я создаю свой JSON с конкатенацией строк, проходящей через мой объект Array. Это так некрасиво, и кажется, что должен быть чистый способ вставки данных моего массива в мой JSON.
Ответ №1:
Если это просто вставка объекта массива в другой объект, то:
var selRoles = getSelectedRoles();
var lid = $('#lid').val();
var json = {
id:lid ,
roles: selRoles
};
Если вам нужно, чтобы весь объект был представлен в виде строки, вы можете использовать метод Дугласа Крокфорда JSON2.js для достижения того же.
Включите файл js, упомянутый выше, на свою страницу, а затем вы используете:
var jsonString = JSON.stringify(json) //json is from previous code.
Ответ №2:
Можете ли вы попробовать:
<script type="text/javascript">
var jsonObj = {
id: lid,//$('#lid').val()
roles:roles // getSelectedRoles()
}
var jsonStr = json_encode(jsonObj);
</script>
Вы можете найти функцию: json_encode здесь
Ответ №3:
Вы могли бы использовать функцию объединения массива ваших ролей:
var rolesString = '["' roles.join('", "') '"]';
Ответ №4:
Современные браузеры предлагают тип объекта JSON, который может сделать подобные вещи тривиальными (JSON.stringify(obj)) .. смотрите, например, здесь