Помогите ламеру распарсить json
Привет, сто лет не связывался с js, но тут прижало..
Суть такая: кидаю ajax'ом запрос, получаю данные. Их нужно распарсить. Приходит json такого типа: Код:
"data": [Мне нужно неизвестным мне способом :) распарсить данные так, что бы "нарисовать" таблицу, в которую засунуть всех пользователей с их данными, а координаты этих пользователей выкинуть на карту. То-есть как на карту добавлять координаты я знаю, мне нужна помощь со структурированием данных. То-есть нужно получить видимо 2 каких-то структуры типа массивов, которые между собой как-то связаны ? Или как лучше это сделать ? Надеюсь суть донес и задача понятна :) |
А можно узнать как на сервере получаются эти данные и почему эти два пользователя в ответе имеют кучу дубликатов?
|
Сервер работает на spring'e, почему именно так выплевывает я не знаю :(
|
Еще вопрос:
Сделал массив:
0: {id: 1, username: "Viktor", phone: "9221307231"}
1: {id: 1, username: "Viktor", phone: "9221307231"}
2: {id: 1, username: "Viktor", phone: "9221307231"}
3: {id: 1, username: "Viktor", phone: "9221307231"}
4: {id: 3, username: "Вега", phone: "9221307233"}
5: {id: 3, username: "Вега", phone: "9221307233"}
Сделал функцию:
function inArray(array, name) {
$.each(array, function(i, e) {
if(e.username == name) {
return true;
}
});
return false;
}
Почему console.log(inArray(usersArray, "Viktor")); всегда возвращает false ? Вставлял в блок if вывод console.log - в этот блок функция входит, но return true; почему-то функцию не останавливает. Что я не так делаю ? |
Цитата:
"data": [
{
"lat": 65.56,
"lon": 56.56,
"dateTime": "2020-06-10 10:42:19.3200000",
"user": {
"id": 1,
"username": "Viktor",
"phone": "111"
},
"isGpsEnable": 0,
"isNetworkEnable": 0
},
{
"lat": 56.8586421,
"lon": 60.5508243,
"dateTime": "2020-06-10 14:06:35.6000000",
"user": {
"id": 3,
"username": "Вега",
"phone": "222"
},
"isGpsEnable": 1,
"isNetworkEnable": 1
}
];
и все, без дубликатов, и никаких преобразований в промежуточный объект для получения из него данных не требуется. А в том, что он у вас возвращает нужно проверять, выбирали уже такое или нет нет, так как у вас данные о "Viktor" повторяются четыре раза, а о "Вега" дважды. Это вообще на какой-то бред похоже. |
Это тестовые данные, в реальных условиях конечно же одинаковых координат не будет :)
Но то, что у каждого пользователя будет именно пачка координат - от этого никуда не деться. По функции подскажите все-таки, почему она все время false ? |
То есть, возьмем так. У вас "data", это свойство некоего объекта, а в примере оно как массив объектов под переменной data. Если из такого объекта нужно получить уникальные данные, а не запросом по известному, то нужно до цикла объявить переменную, которая будет хранить уникальный признак (id). В цикле ее значение проверяется со значением этого же свойства из данных и если не равны, то вывод и сохранение его в переменной.
var data = [
{
"lat": 65.56,
"lon": 56.56,
"dateTime": "2020-06-10 10:42:19.3200000",
"user": {
"id": 1,
"username": "Viktor",
"phone": "111"
},
"isGpsEnable": 0,
"isNetworkEnable": 0
},
{
"lat": 65.56,
"lon": 56.56,
"dateTime": "2020-06-10 10:42:35.8000000",
"user": {
"id": 1,
"username": "Viktor",
"phone": "111"
},
"isGpsEnable": 0,
"isNetworkEnable": 0
},
{
"lat": 65.56,
"lon": 56.56,
"dateTime": "2020-06-10 10:43:16.3770000",
"user": {
"id": 1,
"username": "Viktor",
"phone": "111"
},
"isGpsEnable": 0,
"isNetworkEnable": 0
},
{
"lat": 65.56,
"lon": 56.56,
"dateTime": "2020-06-10 10:45:22.4430000",
"user": {
"id": 1,
"username": "Viktor",
"phone": "111"
},
"isGpsEnable": 0,
"isNetworkEnable": 0
},
{
"lat": 56.8586421,
"lon": 60.5508243,
"dateTime": "2020-06-10 14:06:28.2400000",
"user": {
"id": 3,
"username": "Вега",
"phone": "222"
},
"isGpsEnable": 1,
"isNetworkEnable": 1
},
{
"lat": 56.8586421,
"lon": 60.5508243,
"dateTime": "2020-06-10 14:06:35.6000000",
"user": {
"id": 3,
"username": "Вега",
"phone": "222"
},
"isGpsEnable": 1,
"isNetworkEnable": 1
}
];
var id = 0;
data.forEach( (d) => {
if(id != d.user.id) {
id = d.user.id;
console.log(
'Name: ' + d.user.username +
', Phone: ' + d.user.phone +
', Latitude: ' + d.lat +
', Longitude: ' + d.lon +
', Time: ' + Date.parse(d.dateTime) + ' or ' + d.dateTime.match(/.+(?=\.)/)
)
}
});
В примере вывод в консоль. |
Да, я примерно так и сделал :)
var usersArray = [];
var username;
$.each(data.data, function(index, e) {
if(username != e.user.username) {
username = e.user.username;
usersArray.push(
e.user
);
}
});
|
Цитата:
|
Согласен, уже понял это.
|
| Часовой пояс GMT +3, время: 13:41. |