Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Правильное формирование и разбор JSON

Здравствуйте! Ситуация такова: есть таблица в mySQL, со следующими полями id, description, longitude, latitude. Таблица заполнена, description - название здания, longitude, latitude - координаты.
В php я создаю и заполняю массив который выдергивает эти координаты, если это здание упоминается в другом массиве. Создаю и заполняю вот так.
PHP
1
2
3
4
5
6
7
8
9
10
11
foreach ($records as $row)
        {
            $coordinates = array();             
            $coordinate = $mysqli->query("SELECT longitude, latitude FROM housing WHERE description='".$row['id_housing']."'");
                while ($kd = $coordinate->fetch_assoc())
                {
                    $coordinates[] = $kd;
                }
/*Перевожу массив в JSON*/
                $a = json_encode($coordinates);
        }
Теперь мне необходимо разобрать JSON в JS. Но как я ни гуглил не пойму как это сделать. Да и сам JSON у меня странно выглядит - 2 разных здания - 2 пары квадратных скобок:
PHP
1
2
3
                $a = json_encode($coordinates);
                echo $a;
/*JSON - [{"longitude":"55.830457","latitude":"37.554969"}][{"longitude":"55.832995","latitude":"37.549956"}]*/
2 пары квадратных скобок это нормально или всё должно быть в одних квадратных скобках?
Что я хочу от скрипта JS. Цикл, который перебирает массив JSON и присваивает переменной X - значение longitude, а Y - значение latitude.
Javascript
1
2
3
4
var coordinates = JSON.parse(<?php echo $a;?>, function(key, value)
            {
/*мне кажется у меня в coordinates только половина [{"longitude":"55.830457","latitude":"37.554969"}] */
            });
Ответ: вы функцию не вызываете, она же сама по себе не вызовется.
сделайте так

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
function parseObject(obj)
                {
                    obj = JSON.parse(obj);
                    for(var i = 0; i < obj.length; i++){
                        x = obj[i][0].longitude;
                        y = obj[i][0].latitude;
                        var myPlacemark = new ymaps.Placemark([x, y]);
                        myMap.geoObjects.add(myPlacemark);
                        x=0; y=0;
                    }
                }; 
parseObject(<?php echo $a;?>)

Не по теме:

у вас такая каша)
html + js код в php файле. УЖАС!

Вопрос: Разбор JSON и вывод таблицы с одной строкой + AJAX

вот код

PHPHTML
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<html>
<head>
    <meta charset="UTF-8">
    <title>JDBC Examples</title>
 
    <link rel="stylesheet" type="text/css" href="/css/styles.css"/>
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
 
</head>
 
<body>
 
<h1>Список сотрудников</h1>
 
<table id="table_list">
    <tr>
        <th>ID</th>
        <th>Email</th>
        <th>Пароль</th>
        <th>Заработная плата</th>
        <th>Операции</th>
    </tr>
    <tbody id="table_body">
    </tbody>
</table>
 
<br/>
<hr/>
<p style="color:blue; font-size:25px;"  > Выбрать сотрудника по ID:</p>
<label>
    <input class="idUser" value=""/>
</label>
<br/>
<br/>
<button style="color:mediumvioletred; font-size:15px;" class="getEmployeeBtn">Получить данные по ID</button>
<br/>
 
<h1>Cотрудник:</h1>
<table class="tableEmployee">
    <tr>
        <th>ID</th>
        <th>Email</th>
        <th>Пароль</th>
        <th>Заработная плата</th>
    </tr>
    <tbody class="tableBodyEmployee">
    </tbody>
</table>
<br/>
<hr/>
<br/>
<br/>
 
<div class="formFrame">
 
    <h2>Добавить сотрудника</h2>
 
 
    <input type="hidden" name="hdn_id" value=""/>
 
    Email:
    <br/>
    <label for="txt_email"></label>
    <input id="txt_email" name="txt_email" value=""/>
    <br/>
    <br/>
 
    Пароль:
    <br/>
    <label for="txt_password"></label>
    <input id="txt_password" name="txt_password" value=""/>
 
    <br/>
    <br/>
 
    Заработная плата:
    <br/>
    <label for="txt_salary"></label><input id="txt_salary" name="txt_salary" value=""/>
 
    <br/>
    <br/>
 
    <button id="saveBtn">Сохранить нового сотрудника</button>
 
    <a href="#" id="saveBtn2">Сохранить нового сотрудника</a>
 
    <!-- <form action="" method="post" onsubmit="event.preventDefault();"> -->
 
    <!-- </form> -->
 
 
</div>
 
<script>
    $(function () {
        loadAllEmployes();
 
        $("#saveBtn").click(function () {
            saveEmployee();
        });
 
    });
 
 
    $(function () {
 
        $(".getEmployeeBtn").click(function () {
 
            var id = $(".idUser").val();
            loadEmployById(id);
        });
 
    });
 
    function saveEmployee() {
 
        var json = {
            "email": $("#txt_email").val(),
            "password": $("#txt_password").val(),
            "salary": $("#txt_salary").val()
        };
 
        var jsonObj = JSON.stringify(json);
 
        $.post({
            url: 'api/employees',
            contentType: 'application/json',
            data: jsonObj
        }).success(function () {
            loadAllEmployes();
        });
    }
 
    function loadAllEmployes() {
        $("#table_body").empty();
 
        $.ajax({
            url: 'api/employees',
            method: 'get',
            headers: {
                'Content-Type': 'application/json'
            }
        }).success(function (data) {
         $.each(data, function (index, employe) {
                addEmploye(employe);
            });
 
            $('#table_body').find('input:radio').change(function () {
                var selectedVal = $("#table_body").find("input:radio:checked").attr("name");
                alert(selectedVal);
            });
        });
    }
 
    function loadEmployById(id) {
        $(".tableEmployee").empty();
 
        $.ajax({
            url: 'api/employees/2',
            method: 'get',
            headers: {
                'Content-Type': 'application/json'
            }
        }).success(function (data) {
            addOneEmployee(data);/*разбор одиночной строки*/
         });
    }
 
 
 
    function addEmploye(employe) {
        var employeList = $("#table_list").find("tbody:last");
        
        var idCol = "<td>" + employe.id + "</td>";
        var emailCol = "<td>" + employe.email + "</td>";
        var passwordCol = "<td>" + employe.password + "</td>";
        var salaryCol = "<td>" + employe.salary + "</td>";
 
//  var btn1 = $("input");
 
        var btn = "<input type='radio' name='myRadio_" + employe.id + "' id='myRadio_" + employe.id + "'>";
 
        var actionCol = "<td>" + btn + "</td>";
 
        var employeRow = "<tr>" + idCol + emailCol + passwordCol + salaryCol + actionCol + "</tr>";
 
        employeList.append(employeRow);
    }
 
 
 
    function addOneEmployee(employee) {
        var employeeOneRow = $(".tableEmployee").find("tbody:last");
        
        var idCol = "<td>" + employee.id + "</td>";
        var emailCol = "<td>" + employee.email + "</td>";
        var passwordCol = "<td>" + employee.password + "</td>";
        var salaryCol = "<td>" + employee.salary + "</td>";
        var employeeRow = "<tr>" + idCol + emailCol + passwordCol + salaryCol + "</tr>";
        employeeOneRow.append(employeeRow);
    }
 
</script>
 
</body>
</html>
JSON объект получаю, это проверено.

Вот сюда объект доходит, разбирается и получает форматирование согласно стилю HTML.
Javascript
1
2
3
4
5
6
7
8
9
10
    function addOneEmployee(employee) {
        var employeeOneRow = $(".tableEmployee").find("tbody:last");
        
        var idCol = "<td>" + employee.id + "</td>";
        var emailCol = "<td>" + employee.email + "</td>";
        var passwordCol = "<td>" + employee.password + "</td>";
        var salaryCol = "<td>" + employee.salary + "</td>";
        var employeeRow = "<tr>" + idCol + emailCol + passwordCol + salaryCol + "</tr>";
        employeeOneRow.append(employeeRow);
    }
В debug все видно, но на странице даже исчезает заголовок таблицы для одиночной строки.

Вывод большой таблицы из базы данных, прекрасно рисуется.

В чем может быть ошибка ?

хочу уточнить, возможно плохо пояснил.

Вторая таблица, там где выводится должна одна стока, не рисуется.

Как вообще в debug такое можно отлаживать?
Ответ: я создал имитацию работы с кнопкой.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$(function () {
 
        $(".getEmployeeBtn").click(function () {
 
            var id = $(".idUser").val();
           /* loadEmployById(id);*/
            var json = {
                   "id": 3,
                    "email": "ivan@gmail.com",
                    "password": "secret",
                    "salary": 12.5000
            };
 
            addOneEmployee(json);
 
        });
 
    });
Все прекрасно рисуется.

Но почему же если я вызываю данный метод из ajax - ничего не получается.

Кроме того, не срабатывает точка останова на success

Javascript
1
2
3
success: function (data) {
 addOneEmployee(data);/*разбор одиночной строки*/
}
В чем может быть ошибка ?

Но ведь метод, который запрашивает всю таблицу ( это другaя функция с ajax-запросом, ) отрабатывает нормально?
Правда и сюда debug не попадает, хоть и стоит точка останова.

Добавлено через 1 час 46 минут
вот рабочий код, но почему, может кто объяснит ?

Javascript
1
2
3
4
5
6
7
8
9
10
    function loadEmployById(id) {
        $.ajax({
            url: 'api/employees/' + id,
            method: 'get',
            dataType: 'json',
            success: function (data) {
                addOneEmployee(data); /*разбор одиночной строки*/
            }
        });
    }
все рисуется.

решено
Вопрос: Правильное формирование таблицы

Есть таблица:
CODE (html):

  1. <table class="wide" cellspacing="15" cellpadding="10" border="0">
  2. <tr class="borderRed"><td class="tdUser">...</td>
  3.         <td colspan="2">...</td> </tr>
  4. <tr> <td colspan="3">...</td> </tr>
  5. <tr class="borderGreen"> <td colspan="2">...</td>
  6.         <td class="tdVar">...</td></tr></table>

, где установлена относительная ширина колонок:
CODE (html):

  1. td.tdUser {width:20%; font-size:larger; line-height: 1.1}
  2. td.tdVar {vertical-align:middle; text-align:center; width:15%}

Так вот, почему правильно ширина распределяется только если в таблицу вставить пустую строку с прозрачными однопиксельными изображениями,
CODE (html):

  1. <tr> <td><img src="image/Transparent.gif" alt="" /></td>
  2.         <td><img src="image/Transparent.gif" alt="" /></td>
  3.         <td><img src="image/Transparent.gif" alt="" /></td></tr>

и можно ли добиться правильного формирования как-нибудь ещё?
Без этой строки крайние колонки занимают почти всё доступное место.
Ответ:
Нет. таким образом расставить colspan'ы не получится.
Как минимум одна строка нужна с полным набором колонок.
Но в эти пустые ячейки вовсе необязательно вставлять пиксельные картинки. Они могут быть реально пустыми ячейками.


-----
Чем больше узнаю, тем больше я не знаю.
Вопрос: Проверка валидности разбора JSON (JSON.parse)

Пытаюсь разобрать некорректную json строку вот так: var response = JSON.parse(data);

Как выполнить действия при условии что строка не валидна?
Например пытаюсь разобрать строку var data = 'abc';

Хочу составить условие типо

if(data НЕ МОЖЕТ БЫТЬ РАЗОБРАНА ПРИ ПОМОЩИ JSON.parse)alert('Ты не прав');
else alert('Эта строка удачно разобрана');
Ответ:

Не по теме:

Сообщение от Goga5
Случайно не знаете какие аккумуляторы самые крутые:
Вот это вы уже зря сюда впихнули, похоже на какой-то спам...
И не думайте, что таким образом вам быстрей / точней ответят, если ответят вообще...

Вопрос: Отправка JSON массива сформированного из полей ввода на сервер

Доброго времени суток, подскажите кто знает, будьте добры:
Есть функция разбора JSON массива и визуализации его в виде таблицы, в этой таблице содержаться поля ввода, как сформировать JSON массив из данных которые введены пользователем в поля ввода и отправить его на сервер... (на сервере функция приема массива и записи в базу уже написана) массив отправить в виде такой структуры
[
// [id, serverId, вес на мешке, вес по факту]
[10, 0, 10.12, 14.32],
[11, 0, 11.12, 12.32],
[12, 0, 8.0, 8.0]
]
Вес на мешке и вес по факту - вводимые пользователем данные в поля ввода
id, serverId - данные для идентификации пункта накладной
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
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
function LoadInvoice()
 
    {
        MHTTP.Request(
                {
                    method: "POST",
                    uri: uriMain + "/Control/Invoice/API/GetListItem",
                    hashParameter:
                    {
                        count: 100,
                        countAll: 1,
                        errorId: -1,
                        listColumnNameGet:"id,article,title,weightFact, kindCost",
                        sort:"id"
                    },
                    OnLoadFunction: function(responseText)
                    {
                        j = JSON.parse(responseText);
                        //alert(j.listRow[0]) ;
                        // alert();
 
                        if(j.errorId != -1)
                        {
                            alert("Ошибка: " + j.errorTitle);
                            return;
                        }
 
                        var html = '<table id="grid" class="table table-hover"><thead><tr>', k, q, e1=j.listRow, n, e, ar, countTMC= 0, count = 0, Sum=0;
                                 //Шапка основной таблицы с пунктами
                        html += '<th data-type="string" style="text-align: center">' +'№'+'</th>';
                        html += '<th style="text-align: center">' +'Арт.'+'</th>';
                        html += '<th data-type="number" style="text-align: center">' +'Номенклатура'+'</th>';
                        html += '<th style="text-align: center">' +'Вес в накладной'+'</th>';
                        html += '<th style="text-align: center">' +'Вес на мешке'+'</th>';
                        html += '<th style="text-align: center">' +'Вес по факту'+'</th>';
                        html += '</tr>';
                        html+='</thead>';
 
                        for(k = 0; k < j.listRow.length; ++k)
                        {
                           // alert(j.listRow[k].indexOf( 'ТМЦ' ) != -1 );  //работает
                           if (j.listRow[k].indexOf( "ТМЦ" ) != -1)
                              {
                                        ar= j.listRow[k];
                                        countTMC= countTMC+1;
                              }
                           else
                              {
                                        n= j.listRow[k];
 
                              }
                            count= count+1;
                            e = j.listRow[k];
                            Sum=Sum+parseInt(e[0]);
                           // console.debug(n);
                            console.debug(countTMC);
 
                        html += '<tr>';
 
                        for(q = 0; q < 4; ++q)
                        html += '<td style="text-align: left">'+ MString.ToHTML(String(n[q])) +'</td>';
                        html += '<td style="text-align: center">'+ '<input type="text"  onkeyup="checkParams()" class="form-control"  placeholder="введите вес" />'+'</td>';
                        html += '<td style="text-align: center">'+ '<input type="text" onkeyup="checkParams()" class="form-control"  placeholder="введите вес" />'+'</td>';
                        html += '</tr>';
                        }
                        /// разбор массива с сервера и перевод в HTML
                        console.debug(count);
                        html += '<th colspan="3"  style="text-align: center" >'+'Итого'+'</th>';
                        html += '<th style="text-align: center" >'+'По накладной'+'</th>';
                        html += '<th style="text-align: center" >'+'На мешках'+'</th>';
                        html += '<th style="text-align: center" >'+'По факту'+'</th>';
                        html += '<tr>';
                        html += '<td colspan="3" style="text-align: center" >'+'Товар-'+ count +' место'+'</td>';
                        html += '<td style="text-align: center">'+Sum+'</td>';
                        html += '<td style="text-align: center">'+Sum+'</td>';
                        html += '<td style="text-align: center">'+'...'+'</td>';
                        html += '</tr>';
                        html += '</table>';
 
                        document.getElementById("InvoiceItem").innerHTML = html;
 
 
 
 
                        var htmlF = '<table class="table table-hover"><thead><tr>';
                        //Шапка основной таблицы с пунктами
                        htmlF += '<th style="text-align: center">'+'№'+'</th>';
                        htmlF += '<th style="text-align: center">'+'Арт.'+'</th>';
                        htmlF += '<th colspan="3" style="text-align: center">'+'ТМЦ'+'</th>';
                        htmlF += '<th style="text-align: center">'+'Кол-во/Вес'+'</th>';
                        htmlF += '</tr>';
                        htmlF +='</thead>';
 
                        for(k = 0; k < j.listRow.length; ++k)
                        {
                            // alert(j.listRow[k].indexOf( 'ТМЦ' ) != -1 );  //работает
                            if (j.listRow[k].indexOf( "ТМЦ" ) != -1)
                            {
                                ar= j.listRow[k];
                                for(q = 0; q < ar.length; ++q)
                                htmlF += '<td style="text-align: left">'+ MString.ToHTML(String(ar[q])) +'</td>';
                                htmlF += '<td style="text-align: center">'+ '<input type="text" class="form-control" id="a1" onkeyup="checkParams()"  placeholder="введите вес" />'+'</td>';
                                htmlF += '</tr>';
 
                            }
 
                        }
                        htmlF += '<tr>';
                        htmlF += '<td colspan="6" style="text-align: center">'+'<textarea class="form-control" name = "event" id = "comment"  rows = "5" placeholder="Комментарий:"></textarea>'+'</td>';
                        htmlF += '</tr>';
                        htmlF += '<tr>';
                        htmlF += '</tr>';
                        htmlF += '</table>';
 
                        document.getElementById("FTable").innerHTML = htmlF;
                    }
                });
 
    }
Ответ:
Вопрос: ошибка json.parse

Подскажите, пожалуйста, как можно получить из json

{"objects":[["\"group\": \"0\"","\"index\": \"7\"","\"start\": \"Fri Jan 01 2016 00:00:00 GMT+0200 (Финляндия (зима))\"","\"end\": \"Fri Jan 01 2016 00:10:00 GMT+0200 (Финляндия (зима))\"","\"data-source\": \"visual/bg1.jpg\""],["\"group\": \"3\"","\"index\": \"8\"","\"start\": \"Fri Jan 01 2016 00:00:00 GMT+0200 (Финляндия (зима))\"","\"end\": \"Fri Jan 01 2016 00:10:00 GMT+0200 (Финляндия (зима))\"","\"data-source\": \"visual/symbols/symb1.png\"","\"data-fadeout\": \"null\"","\"data-scale\": \"null\"","\"data-ct_transitionx\": \"null\"","\"data-ct_transitiony\": \"null\"","\"data-ct_symbol_time\": \"2\""]]}


значения group, index... для обоих массивов данных в json. Получение массива данных через var str = JSON.parse(ctdata.objects); дает вот такую ошибку "Uncaught SyntaxError: Unexpected token u in JSON at position 0" Подключены скрипты framework7 и tree.js. jQuery Не подключен.
Ответ: Решил проблему формирования корректного json таким образом:

// Массив с данными 
var object = [];
$$(".ct_obj").each(function(){

object[c1] = [];
object[c1][c2] = '"group": "'+group+'"'; c2++;
object[c1][c2] = '"index": "'+index+'"'; c2++;

c1++;
c2 = 0;
});

// Помещение данных из массива в json 
var mstr = '';
for(var ic = 0; ic < object.length; ic++){
mstr = mstr+'{';
for(var yc = 0; yc < object.length; yc++){
var nyc = yc+1;
if (object[nyc]){
mstr = mstr+''+object[ic][yc]+',';
}else{
mstr = mstr+''+object[ic][yc]+'';	
}
		
}
var nic = ic+1;
if (object[nic]){
mstr = mstr+'},';
}else{
mstr = mstr+'}';		
}
}

var ctdata = "{\"objects\":[";
ctdata = ctdata+=mstr;
ctdata = ctdata+= "]}";
}

Получается валидный json. Но при преобразовании полученного json в строку
var str = JSON.stringify(ctdata);

При последующем парсинге этой строки обратно в значение
var objects = JSON.parse(str.objects);

Вылетает такая вот ошибка:
VM22590:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1
Вопрос: JSON и его переопределение.

Мой код используется на нескольких сайтах. На некоторых из них используется Ext и в нём JSON переопределён.
В моём коде вызывается JSON.stringify и происходит ошибка.
Я проверил и увидел JSON[encode/decode] вместо stringify/parse
У меня есть решение проверять на "если есть stringify", то ......

Кто либо поимел в своей жизни подобную проблему? Как красиво оформить?
Ответ:
Сообщение от siber-biber
Ну как хак то это пойдет если всё работает. Но правильнее конечно былоб место найти где переопределяется ..хотя и более трудозатратно.

Я еще забыл спросить, какой браузер?
Хром. В опере работает.
Вопрос: Как правильно получить данные json (перевести в общую оласть видимости)

Здравствуйте. Хочу создать метод для получения данных и несколько методов для их обработки. Проблема в том, что после вызова libApp.getData() не обновляется массив jsonFile, хотя alert(jsonFile[4].name) внутри libApp.getData() работает.
var jsonFile = [];
var libApp = {
    getData: function() {
        $.getJSON('authors.json', function(data) {
			alert(data[0].name);//Агата Кристи
			jsonFile = data;
			alert(jsonFile[4].name);//Джек Лондон
			return jsonFile;
		});
	},

    displayBooksList: function() {
		libApp.getData();
		alert(jsonFile[4].name);//Консоль: TypeError: jsonFile[4] is undefined, alert не сработает 
	}

};

libApp.displayBooksList();
alert(jsonFile[0].name);//Не сработает.
Ответ: Blondinka, а что мешает повесить функцию, которая находится в глобальной области видимости? При правильном подходе тут никакие promise не нужны.

function getJSONData(jsonFile) {
	//Работаем с данными
	libApp.displayBooksList();
};

var libApp = {
	getData: function() {
		$.getJSON('authors.json', getJSONData);
	},
	displayBooksList: function() {
		libApp.getData();
		alert(jsonFile[4].name);
	}
};


Да и вообще, такие вещи нужно делать "классом".
Вопрос: Создать Json объект на основе разметки

Здравствуйте. Задача такова: парсить страницу и на ее основе сформировать массив объектов. Сам объект представляет собой 2 поля: 1)имя 2)массив объектов.
На скрине я цветами выделил все:
красный - это массив объектов
оранжевый - это сам объект в массиве
бардовый - поле "Имя"
желтый - поле массив

я пробую делать это как-то так:
<script>
        function PostData() {
            var questionsObj = [];
            var Polls_Possible_Answers = [];
            var c = [];
            var count_questions = $('.questionBlock>div').length;
            for (var j = 0; j < count_questions; j++)
            {
                var count_answers = $('.answer>div').length;
                for (var p = 0; p < count_answers; p++)
                {
                    if ($('#pos_ans[' + p + ']').val() != "") {
                        Polls_Possible_Answers.push($(this).val());
                    };
                    questionsObj[j] = {
                        que_name: $('#que_name['+j+']').val(),
                        posAns_value: Polls_Possible_Answers
                    }
                    
                }
            }
            var json = $.toJSON(questionsObj);
        }
    </script>

Может есть другие идеи как реализовать такую форму? мне надо передать этот набор объектов в контроллер, где я с его буду брать значения и записывать в бд
Ответ:
Сообщение от Scantraxx
верно?
Зачем куча форм? Все нужно размещать в одной форме, и потом, если вопрос, а на него варианты ответа, из которых нужно выбрать правильный, то это все таки не type='text', а type="radio". Или ответ на вопрос предполагает ввод произвольного текста?
Вопрос: Ошибка при чтении json полученного через ajax

Здравствуйте.

Хочу сделать подгрузку json через ajax, с последующим поиском по json, по :

var json;
var xmlhttp;
var products;		

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp = new XMLHttpRequest();
}
else
{// code for IE6, IE5
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
		if (xmlhttp.readyState==4 && xmlhttp.status==200)
		{
			json = JSON.stringify(xmlhttp.responseText);

			json = JSON.parse(json);
		}
}
xmlhttp.open("GET","/app/js/lib.json",true); 
xmlhttp.send();
		
function searchPositions(arr, searchKey) 
{
return arr.filter(obj => Object.keys(obj).some(key => obj[key].includes(searchKey)));
}

products = searchPositions(json, "текст");


В итоге получаю ошибку в строке return arr.filter(obj => Object.keys(obj).some(key => obj[key].includes(searchKey))); :
main.js:270 Uncaught TypeError: arr.filter is not a function

Причем если json вставить сразу в код, примерно так, то ошибок не будет и поиск отрабатывает:

json = JSON.stringify([{"id":1,"low_name":"белый карандаш","name":"Карандаш"},{"id":2,"low_name":"синий фломастер","name":"Фломастер"},{"id":3,"low_name":"черный маркер","name":"Маркер"}]);



Как исправить эту ошибку?

Файл json , который я пытаюсь получить через ajax создается заново каждый день и встроить его в js файл нет возможности.
Ответ: действительно.
laimas и рони огромное спасибо!

Перенес код ниже в 19 строку
document.addEventListener("keyup", function(e) {

if (e.target.id == 'search_field')
{
     if(e.target.value.length > 1){
	  products = searchPositions(json, "текст");
     }
});


JSON.stringify убрал. действительно был некоректный json, добавил [ ]