Как поместить объект массива в JSON?

#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)) .. смотрите, например, здесь