Вывести данные из документа JSON в таблицу HTML

попробуйте это, чтобы вытащить только список valuesиз вашего json

import json
import ast
import pandas as pd
mystr = """
{'tags': [{'name': 'Temperature1',
  'results': [{'attributes': {'Location': ['3rd Floor'],
  'Sensor-Serial-Number': ['PT100']},
  'groups': [{'name': 'type', 'type': 'number'}],
  'values': [[1460958592800, 24.2, 3],
  [1460958602800, 24.1, 1],
  [1460958612800, 23.9, 1],
  [1460958622800, 24.2, 1],
  [1460958632800, 24.5, 1],
  [1460958642800, 24.9, 1],
  [1460958652800, 24.6, 1],
  [1460958662800, 24.7, 1],
  [1460958672800, 24.7, 1]]}],
 'stats': {'rawCount': 9}}]}
"""
val = ast.literal_eval(mystr)
val1 = json.loads(json.dumps(val))
val2 = val1['tags'][0]['results'][0]['values']
print pd.DataFrame(val2, columns=["time", "temperature", "quality"])

результат оказывается

            time  temperature  quality
0  1460958592800         24.2        3
1  1460958602800         24.1        1
2  1460958612800         23.9        1
3  1460958622800         24.2        1
4  1460958632800         24.5        1
5  1460958642800         24.9        1
6  1460958652800         24.6        1
7  1460958662800         24.7        1
8  1460958672800         24.7        1

какая ваша таблица для набора данных

Я экспериментирую с jQuery, JSON и т. д. и столкнулся со следующей задачей. У меня есть скрипт загрузчика на сервере, который возвращает данные таблицы в формате JSON. Получив данные JSON, я хочу заполнить ими свою таблицу. В настоящее время я использую код, аналогичный следующему (есть больше столбцов и более сложная обработка, но вы поняли идею):

...
for (var key=0, size=data.length; key<size;key++) {

  $('<tr>')
            .append( $('<td>').html(
                data[key][0]
            ) )
            .append( $('<td>').addClass('whatever1').html(
                data[key][1]
            ) )
            .append( $('<td>').addClass('whatever2').html(
                data[key][2]
            ) )
            .appendTo('#dataTable');
}
...

<table id="#dataTable"></table>
...

Это работает очень хорошо. Но как только данные растут, они становятся ужасно медленными. Для нескольких сотен записей требуется около 5 секунд (Firefox, IE) для построения таблицы, и это немного медленно. Если я, например, создам весь HTML на сервере и отправлю его в виде строки, которую я включу в таблицу, это будет довольно быстро.

Итак, есть ли более быстрый способ заполнить таблицу?

ПРИМЕЧАНИЕ. Я знаю, что такое пейджинг, и я буду использовать его в конце, поэтому, пожалуйста, не говорите: «Зачем вам такая большая таблица на вашей странице?». Этот вопрос о том, как быстро заполнить таблицу, независимо от того, сколько записей вы будете отображать 🙂

Данные JSON очень легко могут быть преобразованы в JavaScript.

JavaScript же может использоваться для динамического изменения HTML кода на веб-странице.

HTML таблица

Создадим HTML таблицу с данными, полученными в виде JSON:


obj = { "table":"customers", "limit":20 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
   if (this.readyState == 4 && this.status == 200) {
       myObj = JSON.parse(this.responseText);
       txt += "<table border='1'>"
       for (x in myObj) {
           txt += "<tr><td>" + myObj[x].name + "</td></tr>";
       }
       txt += "</table>" 
       document.getElementById("demo").innerHTML = txt;
   }
}
xmlhttp.open("POST", "json_demo_db_post.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam); 

Динамическая HTML таблица

А теперь создадим HTML таблицу, основываясь на значении выпадающего меню:


<select id="myselect" onchange="change_myselect(this.value)">
    <option value="">Выберите значение:</option>
    <option value="customers">Покупатели</option>
    <option value="products">Товары</option>
    <option value="suppliers">Поставщики</option>
</select>

<script>
function  change_myselect(sel) {
    var obj, dbParam, xmlhttp, myObj,  x, txt = "";
    obj = { "table":sel, "limit":20 };
    dbParam = JSON.stringify(obj);
    xmlhttp = new  XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            myObj = JSON.parse(this.responseText);
            txt += "<table border='1'>"
            for (x in myObj) {
                 txt += "<tr><td>" + myObj[x].name + "</td></tr>";
            }
            txt += "</table>" 
            document.getElementById("demo").innerHTML = txt;
        }
    };
    xmlhttp.open("POST", "json_demo_db_post.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("x=" + dbParam);
}
</script> 

Выпадающий HTML список

Создадим выпадающий HTML список с данными, полученными как JSON:


obj = { "table":"customers", "limit":20 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myObj = JSON.parse(this.responseText);
        txt += "<select>"
        for (x in myObj) {
             txt += "<option>" + myObj[x].name;
        }
        txt += "</select>" 
        document.getElementById("demo").innerHTML = txt;
    }
}
xmlhttp.open("POST", "json_demo_db_post.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam); 

Accuracy

0 / 0 / 0

Регистрация: 14.12.2014

Сообщений: 35

1

11.04.2019, 22:28. Показов 11491. Ответов 9

Метки json parse (Все метки)


Привет всем, помогите как вывести данные с json в таблицу как на рисунке, а то я уже все сделал а это не удается
серв

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var express = require('express');
var app = express();
 
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});
 
 
 
var data = {
    caption: "data",
    headers: ["header1", "header2", "header3"],
    data: [
        ["data11", "data2"],
        ["data21", "data22"]
    ]
};
 
app.get('/', function (req, res) {
  res.send(data);
});
 
app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

страница

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html>
<html>
<body>
 
<style>
table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
th, td {
  padding: 15px;
}
h2 {
  text-align: center;
}
</style>
 
<input id="update" type="button" value="Update">
<h2>Games</h2>
<div id="demo"></div>
 
<script>
window.onload = function() {
    document.querySelector('#update').onclick = function() {
        ajaxGet();
    }
}
 
function ajaxGet() {
  var xmlhttp, myObj, x, txt = "";
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
        myObj = JSON.parse(this.responseText);
        console.log(myObj);
        txt += "<table> <tr>";
            for (x in myObj) {
            txt += `<th>${myObj[x]}</th>`;
            }
        txt += "</tr>";
    txt += "</table>"    
    document.getElementById("demo").innerHTML = txt;
  }
};
xmlhttp.open("GET", "http://localhost:3000/");
xmlhttp.send();
}
</script>
 
</body>
</html>
Миниатюры

Вывести данные с json в таблицу
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Qwerty_Wasd

dev — investigator

Эксперт JSЭксперт HTML/CSS

2145 / 1491 / 651

Регистрация: 16.04.2016

Сообщений: 3,695

11.04.2019, 23:17

2

Лучший ответ Сообщение было отмечено Accuracy как решение

Решение

Accuracy, один из примеров — https://codepen.io/qwerty_wasd/pen/GLEgQX

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let data = {
    caption: "data",
    headers: ["header1", "header2", "header3"],
    data: [
        ["data11", "data2", "data3"],
        ["data21", "data22", "data23"]
    ]
}
document.body.insertAdjacentHTML(
  `beforeEnd`,
  `<table>
    <thead>
      <tr>${data.headers.map(h => `<th>${h}</th>`).join``}</tr>
    </thead>
    <tbody>
      ${data.data.map(r => `<tr>${r.map(c => `<td>${c}</td>`).join``}</tr>`).join``}
    </tbody>
   </table>`
);



1



0 / 0 / 0

Регистрация: 14.12.2014

Сообщений: 35

11.04.2019, 23:53

 [ТС]

3

Спасибо огромное !



0



dev — investigator

Эксперт JSЭксперт HTML/CSS

2145 / 1491 / 651

Регистрация: 16.04.2016

Сообщений: 3,695

11.04.2019, 23:54

4

Accuracy, не за что, удачи Вывести данные из документа JSON в таблицу HTML



0



amr-now

Эксперт JS

6440 / 3889 / 2005

Регистрация: 14.06.2018

Сообщений: 6,781

12.04.2019, 09:38

5

Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Всем здравствуйте!
Accuracy, объект не совсем же совпадал с картинкой. И Games по всей видимости надо было взять из caption.

Javascript
1
2
3
4
5
6
7
8
                        var data = {
                            caption: "Games",
                            headers: ["header1", "header2", "header3"],
                            data: [
                                ["data11", "data12", "data13"],
                                ["data21", "data22", "data23"]
                            ]
                        };

C fetch и обработкой ошибок. В принципе добавлять в txt — тоже нормально. Там немного доделать надо было:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        table,
        th,
        td {
            border: 1px solid black;
            border-collapse: collapse;
        }
 
        th,
        td {
            padding: 15px;
        }
 
        h2 {
            text-align: center;
        }
    </style>
</head>
<body>
    <input id="update" type="button" value="Update">
    <div id="demo"></div>
 
    <script>
        async function getJson(url) {
            let response = await fetch(url);
            if (response.ok) {
                return await response.json();
            }
            else throw new Error(`${response.status}: ${response.statusText}`);
        }
 
        async function createTable() {
            try {
                let myObj = await getJson("http://localhost:3000/");
                let e, txt = "";
                console.log(myObj);
                txt += `<h2>${myObj.caption}</h2><table><tr>`;
                for (e of myObj.headers) txt += `<th>${e}</th>`;
                txt += "</tr>";
                for (e of myObj.data) txt += `<tr><td>${e.join("</td><td>")}</td></tr>`;
                txt += "</table>";
                document.getElementById("demo").innerHTML = txt;
            }
            catch (e) {
                console.log(e);
            }
        }
        // Обработчик навесить в самом конце, когда DOM построен
        document.getElementById('update').onclick = createTable;
    </script>
</body>
</html>



1



74 / 29 / 4

Регистрация: 16.10.2017

Сообщений: 95

12.04.2019, 17:51

6

Qwerty_Wasd,
Непонятно как это join без скобок с разделителем?



0



74 / 29 / 4

Регистрация: 16.10.2017

Сообщений: 95

12.04.2019, 18:43

8

Qwerty_Wasd,
да я знал про template string но что так join использовать не нашел.



0



dev — investigator

Эксперт JSЭксперт HTML/CSS

2145 / 1491 / 651

Регистрация: 16.04.2016

Сообщений: 3,695

12.04.2019, 18:52

9

timen,

Цитата
Сообщение от timen
Посмотреть сообщение

но что так join использовать не нашел

Вывести данные из документа JSON в таблицу HTML
А join по Вашему чем-то отличается от других методов \ функций? Нет, ))) Конечно он отличается от других своим апи, я имею ввиду что если уж Вы по ссылке на память помните о прочитанном, то выходит Вы чем-то выделили именно этот метод.

«Убивая двух зайцев» — обращаю снова Ваше внимание на параграф Tagged templateshttps://developer.mozilla.org/… _templates и заодно оставляю ссыль для тех кто совсем не в теме Вывести данные из документа JSON в таблицу HTML



1



0 / 0 / 0

Регистрация: 14.12.2014

Сообщений: 35

14.04.2019, 16:00

 [ТС]

10

amr-now,
спасибо, немного спешил не увидел



0



Mariarti06

0 / 0 / 0

Регистрация: 15.11.2019

Сообщений: 5

1

06.10.2020, 22:11. Показов 6895. Ответов 3

Метки нет (Все метки)


Дана верстка с модальным окном(скриншот приложил), и имеется документ JSON. Необходимо:

При нажатии «Выбрать» в поле «Сотрудник» открывается окно выбора с заголовком «Выбор сотрудника». В окне в отдельных столбцах отображается Фамилия, Имя, Отчество, Дата рождения в формате ДД.ММ.ГГГГ. Сотрудники отсортированы в алфавитном порядке.
При наличии выбранной должности произвести проверку того, что выбранный сотрудник проходит по возрасту. Если выбранный сотрудник не проходит проверку, отобразить окно для подтверждения выбора с формулировкой «Выбранный сотрудник не подходит по возрасту. Вы уверены, что хотите выбрать этого сотрудника?» Если пользователь подтверждает свой выбор выполнить обычное поведение кнопки «Ок» окна, иначе выбор не сохраняется.

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[
    {
        "id": "6614058867372730524",
        "lastname": "Алексеев",
        "middlename": "Леонид",
        "firstname": "Витальевич",
        "birthday": "12.12.1976"
    },
    {
        "id": "6614058866860645149",
        "lastname": "Алексеев",
        "middlename": "Сергей",
        "firstname": "Владимирович",
        "birthday": "21.02.1984"
    },
    {
        "id": "6614054409580537115",
        "lastname": "Краско",
        "middlename": "Алексей",
        "firstname": "Владимирович",
        "birthday": "03.05.1962"
    }
]

Никак не получается, вывести эти данные в HTML, я новичок, может что то не то делаю.
Каким образом можно это сделать?
Спасибо!

Миниатюры

Вывести данные из документа JSON в таблицу HTML
 

Вывести данные из документа JSON в таблицу HTML
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Iverycool

Эксперт JS

1584 / 795 / 360

Регистрация: 01.02.2019

Сообщений: 1,045

06.10.2020, 22:52

2

Лучший ответ Сообщение было отмечено Mariarti06 как решение

Решение

Цитата
Сообщение от Mariarti06
Посмотреть сообщение

Никак не получается, вывести эти данные в HTML, я новичок, может что то не то делаю.

А что вы вообще сделали? Покажите ваш код.

JSON же в таблицу легко преобразуется:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function jsonToTable(json) {
  return JSON.parse(json).map(p =>
    `<tr>${[p.lastname, p.middlename, p.firstname, p.birthday].map(el => `<td>${el}</td>`).join('')}</tr>`).join('');
}
 
const table = jsonToTable(`[
    {
        "id": "6614058867372730524",
        "lastname": "Алексеев",
        "middlename": "Леонид",
        "firstname": "Витальевич",
        "birthday": "12.12.1976"
    },
    {
        "id": "6614058866860645149",
        "lastname": "Алексеев",
        "middlename": "Сергей",
        "firstname": "Владимирович",
        "birthday": "21.02.1984"
    },
    {
        "id": "6614054409580537115",
        "lastname": "Краско",
        "middlename": "Алексей",
        "firstname": "Владимирович",
        "birthday": "03.05.1962"
    }
]`);
 
console.log(table);
// yourTable.insertAdjacentHTML('beforeEnd', table);



1



Mariarti06

0 / 0 / 0

Регистрация: 15.11.2019

Сообщений: 5

06.10.2020, 23:01

 [ТС]

3

Смотря на ваш код, я вообще не то делал. Искал в сети всевозможные варианты.Мне нужно брать массив из документа, я не знал как это осуществить и закинул для примера часть массива. Как взять из другого документа?

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ЛабМедиа</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="page">
        <div class="page-block">
            <div class="size">
                <h2 class="block__title">Сотрудник</h2>
            </div>
            <input type="submit" class="block__input person" value="Выбрать">
        </div>
 
        <div class="page-block">
            <div class="size">
                <h2 class="block__title">Должность</h2>
            </div>
            
            <input type="submit" class="block__input position" value="Выбрать">
            
        </div>
 
        <div class="page-block">
            <div class="size">
                <h2 class="block__title">Организация</h2>
            </div>
            
            <input type="submit" class="block__input organization" value="Выбрать">
            
        </div>
 
        <div class="page-block">
            <div class="size">
                <h2 class="block__title">Подразделение</h2>
            </div>
            
            <input type="submit" class="block__input subs" value="Выбрать">
        </div>
    </div>
 
    <div class="window window-person">
        <h2 class="title">Сотрудник</h2>
        <div class="qqq">
            <table id="table-person">
                <tr>
                    <th>Фамилия</th>
                    <th>Имя</th>
                    <th>Отчество</th>
                    <th>Дата рождения</th>
                </tr>
                
 
            </table>
        </div>
        <button class="button">ОК</button>
        <button class="button cancel per">Отмена</button>
    </div>
 
    </div>
    <div class="window window-position">
        <h2 class="title">Должность</h2>
        <div class="qqq"></div>
        <button class="button">ОК</button>
        <button class="button cancel pos">Отмена</button>
    </div>
 
    </div>
    <div class="window window-organization">
        <h2 class="title">Организация</h2>
        <div class="qqq"></div>
        <button class="button">ОК</button>
        <button class="button cancel org">Отмена</button>
    </div>
 
    </div>
 
    <div class="window window-subs">
        <h2 class="title">Поразделение</h2>
        <div class="qqq"></div>
        <button class="button">ОК</button>
        <button class="button cancel sub">Отмена</button>
    </div>
 
<!-- подключаю jquery-->
<script src="jquery-3.3.1.min.js"></script>
<!-- для модального окна -->
<script>
$(document).ready(function(){
    $('.person').on("click", function(){
    $('.window-person').show();
    });
    $('.per').on("click", function(){
    $('.window-person').hide();
    });
 
    $('.position').on("click", function(){
    $('.window-position').show();
    });
    $('.pos').on("click", function(){
    $('.window-position').hide();
    });
 
    $('.organization').on("click", function(){
    $('.window-organization').show();
    });
    $('.org').on("click", function(){
    $('.window-organization').hide();
    });
 
    $('.subs').on("click", function(){
    $('.window-subs').show();
    });
    $('.sub').on("click", function(){
    $('.window-subs').hide();
    });
});
</script>
 
<script>
    let table = document.querySelector('#table-person');
 
let tr = document.createElement('tr');
 
for (let i = 1; i <= 3; i++) {
    let td = document.createElement('td');
    tr.appendChild(td);
}
 
table.appendChild(tr);
 
    let table = document.getElementById('#table-person');
 
for (let user of users) {
    let tr = document.createElement('tr');
    
    let td1 = document.createElement('td');
    td1.innerHTML = lastname;
    tr.appendChild(td1);
    
    let td2 = document.createElement('td');
    td2.innerHTML = middlename;
    tr.appendChild(td2);
    
    let td3 = document.createElement('td');
    td3.innerHTML = firstname;
    tr.appendChild(td3);
 
    let td4 = document.createElement('td');
    td4.innerHTML = birthday;
    tr.appendChild(td4);
    
    table.appendChild(tr);
}
let users = [
    {
        id: "6614058867372730524",
        lastname: "Алексеев",
        middlename: "Леонид",
        firstname: "Витальевич",
        birthday: "12.12.1976"
    },
    {
        id: "6614058866860645149",
        lastname: "Алексеев",
        middlename: "Сергей",
        firstname: "Владимирович",
        birthday: "21.02.1984"
    },
    {
        id: "6614054409580537115",
        lastname: "Краско",
        middlename: "Алексей",
        firstname: "Владимирович",
        birthday: "03.05.1962"
    }
    ];
</script>
 
</body>
</html>



0



Эксперт PHP

3100 / 2586 / 1219

Регистрация: 14.05.2014

Сообщений: 7,227

Записей в блоге: 1

07.10.2020, 11:50

4

Mariarti06, клиент (браузер) не имеет доступа к операционной системе, поэтому открывать и читать файлы напрямую не умеет. Можно попробовать через FileReader, но для этого нужно, чтобы файл выбирался пользователем через <input type="file"...>.

Добавлено через 1 минуту
Это если планируется, что данная страница будет лежать не на сервере, а на обычном ПК. Для сервера есть другие решения.



1



tom7778

0 / 0 / 0

Регистрация: 05.11.2020

Сообщений: 15

1

30.11.2020, 22:44. Показов 3979. Ответов 2

Метки array, dom, javascript, json (Все метки)


У меня есть json, с помощью которого мне нужно создать таблицу статистики. первый массив — это категории. первый элемент массива категорий соответствует названию карточек во втором массиве. а второе слово из категорий(первый массив) соответствует названию категории карточек для третьего массива и т.д. (cards[0][1], cards[0][2] и тд это названия категорий для cards[1], cards[2] и тд).

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const cards = [ 
  [
    {
      id: 0,
      name: 'Action (set A)',
    }, 
    {
      id: 1,
      name: 'Action (set B)',
    },
    {
      id: 2,
      name: 'Animal (set A)',
    }
  ],
  [
    {
      word: 'cry',
      translation: '...',
    },
    {
      word: 'dance',
      translation: '...',
    },
    {
      word: 'dive',
      translation: '...',
    }
  ],
  [
    {
      word: 'open',
      translation: '...',
    },
    {
      word: 'play',
      translation: '...',
    },
    {
      word: 'point',
      translation: '...',
    },
    ....
  ],
  [

Как я могу создать такую таблицу:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<table class="table">
   <tr class="table__row table__row_head">
      <td class="table__sortable">Word</td>
      <td class="table__sortable">Translation</td>
      <td class="table__sortable">Category</td>
      <td class="table__sortable">Clicks</td>
      <td class="table__sortable">Correct</td>
      <td class="table__sortable">Wrong</td>
   </tr>
   <tr class="table__row">
      <td>angry</td> - word
      <td>....</td>  - translation
      <td>Emotion</td>  - category for card
      <td>0</td> и эти поля заполнить нулями
      <td>0</td>
      <td>0</td>
   </tr>
   <tr class="table__row">
      <td>argue</td>....</table>

Я попробовала создать функцию, но она выводит только по одному слову из категории и название категории не соответсвует слову

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function createTable(array) {
  const table = document.createElement('table');
  table.id = 'table';
  const tbody = document.createElement('tbody'); 
  const thead = document.createElement('thead');
  thead.innerHTML = `<tr>
                        <th>Word</th>
                        <th>Translation</th>
                        <th>Category</th>
                        <th>Clicks</th>
                        <th>Correct</th>
                        <th>Wrong</th>
                        <th>% errors</th>
                      </tr>`;
  table.append(thead);
  table.append(tbody);
  for (let i = 1; i < array.length; i++) {
    const tr = document.createElement('tr');
    for (let j = 0; j < array[i].length; j++) {   
      tr.innerHTML = `<td>${array[i][j].word}</td>
                      <td>${array[i][j].translation}</td>
                      <td>${array[0][j].name}</td>
                      <td>0</td>
                      <td>0</td>
                      <td>0</td>
                      <td>0</td>`;
    }
    tbody.append(tr);
  }
  document.getElementById('category').append(table)
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



skynick99

326 / 159 / 45

Регистрация: 06.12.2012

Сообщений: 305

01.12.2020, 01:13

2

Лучший ответ Сообщение было отмечено tom7778 как решение

Решение

ну если в json количество id будет 100% совподать с количеством set(-ov) из слов, что бы мы не вышли за предел массивов тогда как то так: (ну и конечно, если я вас правильно понял)

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
 
<body>
    <div id="category">
    </div>
    <script>
        const cards = [
            [
                {
                    id: 0,
                    name: 'Action (set A)',
                },
                {
                    id: 1,
                    name: 'Action (set B)',
                },
                {
                    id: 2,
                    name: 'Animal (set A)',
                }
            ],
            [
                {
                    word: 'cry',
                    translation: '...',
                },
                {
                    word: 'dance',
                    translation: '...',
                },
                {
                    word: 'dive',
                    translation: '...',
                }
            ],
            [
                {
                    word: 'open',
                    translation: '...',
                },
                {
                    word: 'play',
                    translation: '...',
                },
                {
                    word: 'point',
                    translation: '...',
                }
            ],
            [
                { word: 'crocodile', translation: '...' },
                { word: 'zebra', translation: '...' }
            ]
        ];
 
        function createTable(array) {
            const table = document.createElement('table');
            table.id = 'table';
            const tbody = document.createElement('tbody');
            const thead = document.createElement('thead');
            thead.innerHTML = `<tr>
                        <th>Word</th>
                        <th>Translation</th>
                        <th>Category</th>
                        <th>Clicks</th>
                        <th>Correct</th>
                        <th>Wrong</th>
                        <th>% errors</th>
                      </tr>`;
            table.append(thead);
            table.append(tbody);
 
            for (let i = 1; i - 1 < array[0].length; i++) {
                for (let j = 0; j < array[i].length; j++) {
                    let tr = document.createElement('tr');
                    tr.innerHTML = `<td>${array[i][j].word}</td>
                       <td>${array[i][j].translation}</td>
                       <td>${array[0][i - 1].name}</td>
                       <td>0</td>
                       <td>0</td>
                       <td>0</td>
                       <td>0</td>`;
                    tbody.append(tr);
                }
            }
            document.getElementById('category').append(table)
        }
        createTable(cards);
    </script>
</body>
 
</html>

банальный вопрос, почему в json id и имена не идут вместе с set-ami из слов?

Добавлено через 6 минут

Не по теме:

P. S. сегодня день однотипных ошибок наверное. у вас это js 18,20 и 28 строки.

Добавлено через 2 минуты

Не по теме:

P.S.

Цитата
Сообщение от tom7778
Посмотреть сообщение

она выводит только по одному слову из категории

я про это имел ввиду.



1



0 / 0 / 0

Регистрация: 05.11.2020

Сообщений: 15

01.12.2020, 07:57

 [ТС]

3

спасибо большое. Просто был дан изначально такой json. А id вообще прописывалось мной вручную, чтобы реализовать ещё другой функционал



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

01.12.2020, 07:57

Помогаю со студенческими работами здесь

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из…

Ошибка при обработке Json — Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой:

An unhandled exception of type…

Вывести данные из документа JSON в таблицу HTML Парсинг JSON из строки таблицы
Здравствуйте!
Не получается (не хватает знаний) создать следующий скрипт:
Есть таблица , которая…

Поиск в БД таблицы формата json
Подскажите пожалуйста, есть таблица например ‘test’, в ней столбец json, содержит данные такого…

Json структура из excel таблицы
Добрый день, имеется таблица с данными
Исходные данные в Excel
а на выходе получаем такие данные…

jquery json each. Построчный вывод таблицы
$.ajax({
url: ‘/welcome/loadfile.html’, // указываем URL и
dataType : &quot;json&quot;,…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

3

Очевидно, что большая часть мира решила, что они хотят использовать JSON для своих общедоступных конечных точек API. Однако большую часть времени вам придется иметь дело с механизмами хранения, которые не очень хорошо работают с JSON. Это может привести к путанице, потому что вам нужно вставить квадратный колышек в круглое отверстие.

Однако в SQLite добавлены функции JSON, позволяющие вам изменять и изменять данные JSON любым творческим способом. Вы можете использовать эти триггеры и триггеры SQLite для автоматического преобразования JSON в таблицы любого типа, которые вы хотите. Добавьте дополнительные настройки, и вы сможете сделать все еще более автоматизированным. Эта поддержка была добавлена в SQLite 3.9.0 (выпущена в 2015 году), поэтому, если предположить, что Debian не отключил ее без уважительной причины, вы сможете использовать ее сегодня.

В этом примере мы собираемся запрашивать общедоступные конечные точки JSONFeed и превращать их в таблицы SQL. Начнем со схемы таблицы, которая выглядит так:

CREATE TABLE IF NOT EXISTS jsonfeed_raw
  ( feed_url     TEXT  PRIMARY KEY
  , scrape_date  TEXT  NOT NULL  DEFAULT (DATE('now'))
  , raw          TEXT  NOT NULL
  );

scrape date — это, по сути, дата, когда строка JSONFeed была вставлена ​​в базу данных. Это может быть полезно при написании других частей стека для автоматического запроса фидов на наличие изменений. Это оставлено читателю в качестве упражнения.

Затем вы можете вставлять данные в базу данных SQLite, используя модуль Python sqlite3:

#!/usr/bin/env nix-shell
#! nix-shell -p python39 --run python

import sqlite3
import urllib.request

con = sqlite3.connect("data.db")

def get_feed(feed_url):
    req = urllib.request.Request(feed_url, headers={"User-Agent": "Xe/feedfetch"})
    with urllib.request.urlopen(req) as response:
        cur = con.cursor()
        body = response.read()
        cur.execute("""
           INSERT INTO jsonfeed_raw
             (feed_url, raw)
           VALUES
             (?, json(?))
        """, (feed_url, body))
        con.commit()
        print("got feed %s" % (feed_url))

get_feed("https://christine.website/blog.json")

Итак, теперь давайте поиграем с данными! Давайте загрузим схему базы данных с помощью команды sqlite3:

$ sqlite3 data.db < schema.sql

Символ «меньше» является перенаправлением, он загружает данные из schema.sql в качестве стандартного ввода в команду sqlite.

Затем запустите этот скрипт Python для заполнения базы данных:

$ python ./jsonfeedfetch.py
got feed https://christine.website/blog.json

Затем откройте командную строку SQLite:

$ sqlite3 data.db
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
sqlite>

А теперь мы можем поиграть с некоторыми функциями JSON. Сначала продемонстрируем json_extract. Это позволяет вам извлечь значение из объекта JSON. Например, давайте возьмем заголовок фида из JSONFeed моего сайта:

sqlite> select json_extract(raw, '$.title') from jsonfeed_raw;
Xe's Blog

Мы можем использовать эту функцию, чтобы помочь нам создать таблицу, в которой хранятся метаданные, которые нам нужны, из JSONFeed, например:

CREATE TABLE IF NOT EXISTS jsonfeed_metadata
  ( feed_url      TEXT  PRIMARY KEY
  , title         TEXT  NOT NULL
  , description   TEXT
  , home_page_url TEXT
  , updated_at    TEXT  NOT NULL  DEFAULT (DATE('now'))
  );

Если вы спросите моих коллег, они подтвердят, что в реальной жизни я действительно неиронично пишу SQL таким образом.

Затем мы можем заполнить эту таблицу запросом, подобным этому:

INSERT INTO jsonfeed_metadata
            ( feed_url
            , title
            , description
            , home_page_url
            , updated_at
            )
SELECT jsonfeed_raw.feed_url AS feed_url
     , json_extract(jsonfeed_raw.raw, '$.title') AS title
     , json_extract(jsonfeed_raw.raw, '$.description') AS description
     , json_extract(jsonfeed_raw.raw, '$.home_page_url') AS home_page_url
     , DATE('now') AS updated_at
FROM jsonfeed_raw;

Ключевое слово AS позволяет связать значения в операторе SELECT с именами для использования в другом месте запроса.Я не знаю, нужно ли это *strictly*, однако это заставляет имена выстраиваться в линию, и SQLite не жалуется на это, так что, вероятно, все в порядке.

Теперь это работает, однако знаете, что проще, чем писать операторы в консоли SQLite вот так? Триггеры SQLite позволяют нам автоматически запускать операторы базы данных при возникновении определенных условий. Основное условие, о котором мы хотим позаботиться прямо сейчас, — это когда мы вставляем новые данные. Мы можем превратить этот оператор в триггер после вставки следующим образом:

CREATE TRIGGER IF NOT EXISTS jsonfeed_raw_ins
  AFTER INSERT ON jsonfeed_raw
  BEGIN
    INSERT INTO jsonfeed_metadata
                ( feed_url
                , title
                , description
                , home_page_url
                )
    VALUES ( NEW.feed_url
           , json_extract(NEW.raw, '$.title')
           , json_extract(NEW.raw, '$.description')
           , json_extract(NEW.raw, '$.home_page_url')
           );
  END;

Затем мы можем запустить несколько команд, чтобы уничтожить все состояние базы данных:

sqlite3> DELETE FROM jsonfeed_metadata;
sqlite3> DELETE FROM jsonfeed_raw;

И снова запустите этот скрипт Python, после чего данные должны появиться автоматически:

sqlite3> SELECT * FROM jsonfeed_metadata;
https://christine.website/blog.json|Xe's Blog|My blog posts and rants about various technology things.|https://christine.website|2022-01-04

Это как волшебство!

Однако, если вы снова запустите этот скрипт Python, не удаляя строки, вы получите нарушение первичного ключа. Мы можем исправить это, превратив вставку в upsert примерно так:

cur.execute("""
    INSERT INTO jsonfeed_raw
      (feed_url, raw)
    VALUES
      (?, json(?))
    ON CONFLICT DO
      UPDATE SET raw = json(?)
""", (feed_url, body, body))

А также сделайте дополнительный триггер обновления для таблицы jsonfeed_raw:

CREATE TRIGGER IF NOT EXISTS jsonfeed_raw_upd
  AFTER UPDATE ON jsonfeed_raw
  BEGIN
    INSERT INTO jsonfeed_metadata
                ( feed_url
                , title
                , description
                , home_page_url
                )
    VALUES ( NEW.feed_url
            , json_extract(NEW.raw, '$.title')
            , json_extract(NEW.raw, '$.description')
            , json_extract(NEW.raw, '$.home_page_url')
            )
    ON CONFLICT DO
       UPDATE SET
             title         = json_extract(NEW.raw, '$.title')
           , description   = json_extract(NEW.raw, '$.description')
           , home_page_url = json_extract(NEW.raw, '$.home_page_url')

Вероятно, вам следует обновить исходный триггер, чтобы он тоже был upsert. Вы можете следовать этому триггеру в качестве руководства. Но обязательно DROP TRIGGER jsonfeed_raw_upd; cначала!

Мы также можем очистить элементы фида с помощью json_each. json_each позволяет перебирать массив JSON и возвращает строки SQLite для каждого значения в этом массиве. Например:

sqlite> select * from json_each('["foo", "bar"]');
0|foo|text|foo|1||$[0]|$
1|bar|text|bar|2||$[1]|$

Схему для временной таблицы, которую json_each(и связанную с ней json_tree) использует можно найти здесь. Вы также можете получить что-то из списка в объекте со вторым аргументом json_each, так что вы можете делать такие вещи:

sqlite> select * from json_each('{"spam": ["foo", "bar"]}', '$.spam');
0|foo|text|foo|3||$.spam[0]|$.spam
1|bar|text|bar|4||$.spam[1]|$.spam

Используя это, мы можем создать таблицу для каждого из элементов фида, которая выглядит примерно так:

CREATE TABLE IF NOT EXISTS jsonfeed_posts
  ( url             TEXT  PRIMARY KEY
  , feed_url        TEXT  NOT NULL
  , title           TEXT  NOT NULL
  , date_published  TEXT  NOT NULL
  );

А затем удалить все данные из базы данных с помощью такого запроса:

INSERT INTO jsonfeed_posts
            ( url
            , feed_url
            , title
            , date_published
            )
SELECT
  json_extract(json_each.value, '$.url') AS url
, jsonfeed_raw.feed_url AS feed_url
, json_extract(json_each.value, '$.title') AS title
, json_extract(json_each.value, '$.date_published') AS date_published
FROM
  jsonfeed_raw
, json_each(jsonfeed_raw.raw, '$.items');

Это извлечет все значения поля items в каждом JSONFeed, а затем автоматически заполнит их в таблице jsonfeed_posts. Однако превращение этого в триггер при наивном подходе не сработает мгновенно.

Допустим, у нас есть форма триггера, которая выглядит так:

CREATE TRIGGER IF NOT EXISTS jsonfeed_raw_upd_posts
  AFTER INSERT ON jsonfeed_raw
  BEGIN
    INSERT INTO jsonfeed_posts
                ( url
                , feed_url
                , title
                , date_published
                )
    SELECT
        json_extract(json_each.value, '$.url') AS url
      , NEW.feed_url AS feed_url
      , json_extract(json_each.value, '$.title') AS title
      , json_extract(json_each.value, '$.date_published') AS date_published
    FROM json_each(NEW.raw, '$.items')
    ON CONFLICT DO
      UPDATE SET title = excluded.title
               , date_published = excluded.date_published
               ;
  END;

Если вы вставите это в свою консоль SQLite, вы получите эту ошибку:

Error: near "DO": syntax error

На самом деле это связано с неоднозначностью синтаксического анализа в SQLite. Для того, чтобы исправить это вам нужно будет добавить WHERE TRUE между пунктами триггера FROM и ON CONFLICT:

-- ...
FROM json_each(NEW.raw, '$.items')
WHERE TRUE
ON CONFLICT DO
-- ...

Таким образом день спасает wheretrue, скрытый высший хищник царства SQLite, роковое значение, которое не является ложным только ночью. Плачьте от ужаса, как бы он не добавил вас к своей таблице жертв!

Коррелирующее изменение триггера вставки также является упражнением для читателя.

Теперь вы можете добавлять JSONFeeds по своему усмотрению, и все данные будут автоматически обновляться. Это, вероятно, можно значительно упростить с помощью сгенерированных столбцов, однако это должно работать превосходно для большинства нужд.