Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как прочитать не стандартный JSON (https://javascript.ru/forum/misc/74540-kak-prochitat-ne-standartnyjj-json.html)

Зосимов 19.07.2018 14:06

Как прочитать не стандартный JSON
 
доброго дня.
есть файл file.json в котором содержатся строки
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}

подскажите пожалуйста, как считывать данные по по отдельности в виде таблицы:
John | Doe | 35 | Male | English | car | Honda
John | Doe | 35 | Male | English | car | Honda

пробую $.getJSON() но так как формат не совсем верный, выходит ошибка (

j0hnik 19.07.2018 14:16

var data = [{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"},
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"},
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"},
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}];

console.log(data.map(el=>Object.values(el).join(' | ')).join('\n'));

Зосимов 19.07.2018 14:33

Цитата:

Сообщение от j0hnik (Сообщение 490263)
console.log(data.map(el=>Object.values(el).join(' | ')).join('\n'));[/JS]

спасибо. но выходят 0 везде почему то :(

когда я делаю alert(data) то выводятся строки:
{"name":"John","lastName":"Doe","age":35,"gende r":"Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}

вот эти строки, я хотел привести к нормальном виду. желательно даже в <li> как то загнать каждую строку

рони 19.07.2018 14:49

Зосимов,
на сервере можно сделать JSON ?

Alexandroppolus 19.07.2018 14:56

Цитата:

Сообщение от Зосимов (Сообщение 490268)
спасибо. но выходят 0 везде почему то :(

когда я делаю alert(data) то выводятся строки:
{"name":"John","lastName":"Doe","age":35,"gende r":"Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}

вот эти строки, я хотел привести к нормальном виду. желательно даже в <li> как то загнать каждую строку

набросок
var data = `{"name":"John","lastName":"Doe","age":35,"gende r":"Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
`;

alert(data.trim().split(/\r?\n/).map(function(item) {
	var data = JSON.parse(item);
	return data.name + ' | ' + data.lastName;
}).join('\n'));

Зосимов 19.07.2018 14:57

Цитата:

Сообщение от рони (Сообщение 490269)
Зосимов,
на сервере можно сделать JSON ?

каждый раз при нажатии кнопки, записываются такие данные
let student = {  
    name: 'John',
    lastName: 'Doe',
    age: 35, 
    gender: 'Male',
    department: 'English',
    car: 'Honda' 
};

let data = JSON.stringify(student);

я так понимаю данные нужно привести в правильный формат?

рони 19.07.2018 15:04

Зосимов,
let arr = [];
let student = {
    name: 'John',
    lastName: 'Doe',
    age: 35,
    gender: 'Male',
    department: 'English',
    car: 'Honda'
};
arr.push(student)
let data = JSON.stringify(arr);

Зосимов 19.07.2018 15:24

Цитата:

Сообщение от рони (Сообщение 490274)
Зосимов,
let arr = [];
let student = {
    name: 'John',
    lastName: 'Doe',
    age: 35,
    gender: 'Male',
    department: 'English',
    car: 'Honda'
};
arr.push(student)
let data = JSON.stringify(arr);

теперь данные выглядят так в файле
[{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}]
[{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}]
[{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}]

осталось только их получить правильно с файла

рони 19.07.2018 15:27

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

Зосимов 19.07.2018 15:30

рони, к сожалению нет. получается каждый раз в файл добавляем записи.
они там хранятся и выводятся для просмотра.

рони 19.07.2018 15:34

Зосимов,
а переписать нельзя, без добавления?

рони 19.07.2018 15:37

Цитата:

Сообщение от Зосимов
получается каждый раз в файл добавляем записи.

механизм записи раскройте

Зосимов 19.07.2018 15:38

в общем заморочка получается с правильным json -надо считать файл, записать заново с новыми данными. не удобно и наверное долго?

может все таки оставить в том формате что было? и как перебирать как массив например?

Зосимов 19.07.2018 15:39

Цитата:

Сообщение от рони (Сообщение 490293)
Зосимов,
а переписать нельзя, без добавления?

можно . но если там будет много записей 1000 например, это нормально?

рони 19.07.2018 15:42

Цитата:

Сообщение от Зосимов
надо считать файл, записать заново с новыми данными

да!

Alexandroppolus 19.07.2018 17:09

Цитата:

Сообщение от Зосимов
надо считать файл, записать заново с новыми данными.

разумеется, так не надо делать, ибо катастрофически неэффективно. У тебя, видимо, записи периодически дописываются в файл, правильно?

Цитата:

Сообщение от Зосимов
может все таки оставить в том формате что было? и как перебирать как массив например?

https://javascript.ru/forum/misc/745...tml#post490270

рони 19.07.2018 17:47

Alexandroppolus,
ок :)
var data = `{"name":"John","lastName":"Doe","age":35,"gende r":"Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
`;
data = JSON.parse("["+data.replace(/}\s+{/g, "},{")+"]");
alert(data.map(function(item) {
	return item.name + ' | ' + item.lastName;
}).join('\n'));

рони 19.07.2018 17:57

Зосимов,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  ul{
      list-style: decimal;
  }

  </style>


</head>

<body>
<ul id="info"></ul>
 <script>
var data = `{"name":"John","lastName":"Doe","age":35,"gender":"Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
{"name":"John","lastName":"Doe","age":35,"gender": "Male","department":"English","car":"Honda"}
`;
data = JSON.parse("["+data.replace(/}\s+{/g, "},{")+"]");
var html =  data.reduce(function(temp, item) {
	return temp + '<li>' + Object.values(item).join(" | ") + '</li>';
},"");
info.innerHTML = html;

  </script>
</body>
</html>


Часовой пояс GMT +3, время: 06:28.