Создание html-таблицы с использованием вложенного файла JSON

#jquery #json

#jquery #json

Вопрос:

У меня есть файл JSON с именем info.json , в котором есть личная информация о 20 студентах, и я хочу преобразовать его в HTML таблицу.

Это всего лишь пример (информация только 1).Это касается 20 студентов.Это только заголовки таблиц HTML.Вот как я хочу, чтобы макет моей таблицы. Я не смог привести здесь то, что я пытался, из-за какой-то ошибки. Это то, что я пробовал.

 [{
  "student_name": "Shastri Mahesh",
  "date_of_birth": "03-02-2002",
  "parents": [{
    "father_name": "Shidharth Mahesh",
    "mother_name": "Suhana"
  }],
  "blood_group": "AB-",
  "email": "shastri.mahesh@outlook.com",
  "phone": [{
    "landline": 9812343541,
    "mobile": 908252123
  }],
  "address": [{
    "door_no": "3A",
    "street_name": "Shastri nagar",
    "place_name": "Delhi",
    "pin_code": 142342,
    "country": "India"
  }],
  "degree": [{
    "ug": true,
    "pg": true,
    "others": "PhD(English Hons.)"
  }]
}]

$(document).ready(function() {

  // FETCHING DATA FROM JSON FILE 
  $.getJSON("info.json", function(data) {
    var student = '';

    // ITERATING THROUGH OBJECTS 
    $.each(data, function(key, value) {

      //CONSTRUCTION OF ROWS HAVING 
      // DATA FROM JSON OBJECT 
      student  = '<tr>';
      student  = '<td>'   value.student_name   '</td>';

      student  = '<td>'   value.date_of_birth   '</td>';

      student  = '<td>'   value.parents.father_name   '</td>';

      student  = '<td>'   value.parents.mother_name   '</td>';

      student  = '<td>'   value.blood_group   '</td>';

      student  = '<td>'   value.email   ','   '<br>'   value.phone.landline   ','   value.phone.mobile   '</td>';

      student  = '<td>'   value.address.door_no   ','   value.address.street_name   ','   value.address.place_name   ', <br>'   value.address.country   '-'   value.address.pin_code   '</td>';

      student  = '<td>'   value.degree.ug   '</td>';

      student  = '<td>'   value.degree.pg   '</td>';

      student  = '<td>'   value.degree.others   '</td>';

      student  = '</tr>';
    });

    //INSERTING ROWS INTO TABLE  
    $('#table').append(student);
  });
});  

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

1. Первым шагом является чтение этого файла в переменную javascript. Вы смогли это сделать? Также не могли бы вы более конкретно рассказать о том, что вы пробовали и в чем была проблема (даже на простом английском языке)?

2. Являются ли данные для всех учащихся в том же формате, что и этот?

3. Зачем так много вложенных массивов, если каждый из них содержит только один объект? Необычная структура

4. «Я не смог привести здесь то, что я пытался, из-за какой-то ошибки». Но именно так работает этот сайт. Вы показываете, что вы пробовали, а другие помогают улучшить это. Это не бесплатный сервис для написания кода. Покажите нам код, который вы пробовали

5. Да, формат одинаков для всех студентов

Ответ №1:

Проблема с вашим текущим кодом заключается в том, что вы вообще не используете данные вложенного массива в своей $.each функции. У вас есть вложенный массив, подобный degree и parent's name

Поэтому вам нужно либо перебирать их, либо просто обращаться к data ним напрямую, поскольку данные structure всегда одинаковы. Кроме того, вам нужно упростить results свой массив, используя .html и создавая td's для каждого row , который у вас есть.

Вам нужна таблица heading , которая у вас есть shown на этом рисунке, но вы вообще не добавляете никаких заголовков в свои собственные code .

Наконец, вам также нужно CSS убедиться, что таблица выглядит красиво и в порядке — я исправил все ваши code и другие фиктивные данные, чтобы показать, что все они работают сейчас. Запустите фрагмент ниже.

Полная рабочая демонстрация:

 var data = [{
  "student_name": "Always Helping",
  "date_of_birth": "03-02-2002",
  "parents": [{
    "father_name": "Foo",
    "mother_name": "Bar"
  }],
  "blood_group": "Always B  ",
  "email": "foo@google.com.au",
  "phone": [{
    "landline": 9812343541,
    "mobile": 908252123
  }],
  "address": [{
    "door_no": "3A",
    "street_name": "Shastri nagar",
    "place_name": "Melbourne",
    "pin_code": 85000,
    "country": "Australia"
  }],
  "degree": [{
    "ug": true,
    "pg": true,
    "others": "PhD(IT Hons.)"
  }]
}, {
  "student_name": "Shastri Mahesh",
  "date_of_birth": "03-02-2002",
  "parents": [{
    "father_name": "Shidharth Mahesh",
    "mother_name": "Suhana"
  }],
  "blood_group": "AB-",
  "email": "shastri.mahesh@outlook.com",
  "phone": [{
    "landline": 9812343541,
    "mobile": 908252123
  }],
  "address": [{
    "door_no": "3A",
    "street_name": "Shastri nagar",
    "place_name": "Delhi",
    "pin_code": 142342,
    "country": "India"
  }],
  "degree": [{
    "ug": true,
    "pg": true,
    "others": "PhD(English Hons.)"
  }]
}]

let table = $('#table') //table variable

//Create table heading
table.append("<thead><td>Name</td><td>DOB</td><td>Father's Name</td><td>Mother's Name</td><td>Blood Group</td><td>Contact</td><td>Address</td><td>UG</td><td>PG</td><td>Others</thead></th>");

//Loop through the data
$.each(data, function(index, x) {
  let row = $('<tr>');
  row.append($('<td>').html(x.student_name));
  row.append($('<td>').html(x.date_of_birth));
  //Mother / father
  row.append($('<td>').html(x.parents[0].father_name));
  row.append($('<td>').html(x.parents[0].mother_name));
  row.append($('<td>').html(x.blood_group));
  //get landline [0] or mobile [1]
  row.append($('<td>').html(x.phone[0].landline));
  //Address
  $.each(x.address, function(index, o) {
    row.append($('<td>').html(o.door_no   ', '   o.street_name  
      ', '   o.place_name   ', '   o.pin_code));
  })
  //Degree
  row.append($('<td>').html(x.degree[0].ug));
  row.append($('<td>').html(x.degree[0].pg));
  row.append($('<td>').html(x.degree[0].others));
  table.append(row) //append all data
})  
 th,
td {
  border-collapse: collapse;
  padding: 0.5em;
}

thead {
  font-weight: bold;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table border="1" id="table"></table>  

Ответ №2:

Попробуйте использовать Datatable вы можете обратиться к этому примеру: данные вложенных объектов (массивы)