Как мне преобразовать элементы LI в объект json с помощью jquery?

#jquery #html #json

#jquery #HTML #json

Вопрос:

Если у меня есть список, подобный следующему:

 <ul class="nameList">
    <li value="1">Bob</li>
    <li value="2">Frank</li>
    <li value="3">Sally</li>
</ul>
  

Как я могу преобразовать это в объект json следующим образом:

[{«id»: «1», «title»: «Bob»}, {«id»:»2″,»title»: «Frank»}, {«id»: «3»,»title»: «Frank»}]

Мне нужно перевести эти данные в этот формат, чтобы я мог затем передать их в обратном вызове $.post() моему php-серверу.

Может кто-нибудь сказать мне, как получить элементы из этого списка и преобразовать их в приведенный выше json с помощью jQuery?

Ответ №1:

В jQuery действительно есть что-то встроенное для построения массива: map()

 var items = $('.nameList').find('li').map(function() {
  var item = { };

  item.id = this.value;
  item.title = $(this).text();

  return item;
});
  

Это приведет к созданию массива объектов, соответствующих нужной вам структуре JSON. Затем, чтобы сериализовать это в формате JSON, используйте JSON.stringify, который встроен в новые браузеры и доступен для старых, включая json2.js:

 // Produces [{'id':1,'title':'bob'},{etc},{etc}]
var json = JSON.stringify(items);
  

Также имейте в виду, что $.post() автоматически сериализует параметр данных объекта, как key1=значение1amp;key2=значение2 amp; и т.д. Если вам строго не нужен JSON на стороне сервера, этап сериализации JSON может быть необязательным.

Комментарии:

1. вашей map() нужен .get() в конце

Ответ №2:

 var items = [];

$('ul.nameList').children().each(function() {
  var $this = $(this);
  var item = { id: $this.attr('value'), title: $this.html() };
  items.push(item);
});
  

Ответ №3:

Вы можете просто поместить их в объект JSON, вот как —

    // create a blank array
    var mylist = [];

    // loop trough the li
    $("ul.nameList > li").each(function () {    
    //push element data to the array
        mylist.push({
            "id": $(this).attr("value"),
            "title": $(this).text()
        });
    })

    // then you can simply pass it to the post method 
    $.post("myhandler.php", { list: mylist }, function (data) {
        // recived data
   })
  

И, конечно, ваш html

 <ul class="nameList">
    <li value="1">Bob</li>
    <li value="2">Frank</li>
    <li value="3">Sally</li>
</ul>
  

Рабочий примерhttp://jsfiddle.net/mohammadwali/tkhb5 /

Надеюсь, это помогло!