Xaip
@Xaip

Как нормально распарсить json?

Работаю в Redux транспилирую код через babel.
Получаю с сервера вот такую строку.
{'id': 50, 'text': 'j', 'datetime': '2018-07-04 12:15:56.154427+00:00', 'sender': 'test', 'thread': 1}

Казалось бы... Тривиальная задача JSON.constructor() и все, но нет.
// Вот такая конструкция
JSON.constructor({'id': 50, 'text': 'j', 'datetime': '2018-07-04 12:15:56.154427+00:00', 'sender': 'test', 'thread': 1})
//Выдает мне вот это...
String {"{'id': 50, 'text': 'j', 'datetime': '2018-07-04 12…:56.154427+00:00', 'sender': 'test', 'thread': 1}"}

Хотя в консоли node и хрома выдается нормальный объект:
// Вот такой объект я хочу получить, а Js на до мной издевается
{id: 50, text: "j", datetime: "2018-07-04 12:15:56.154427+00:00", sender: "test", thread: 1}
  • Вопрос задан
  • 6396 просмотров
Решения вопроса 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Кажись в хроме и ноде вы передаете в JSON.constructor объект (который вы скинули), а в вашем коде передается строка, которую нужно превратить в объект через JSON.parse
UPD: У вас формат JSON5, т.к. у вас одинарные кавычки. Есть пару вариантов.
1) Зафигачить все это дело в eval (не круто).
2) Заменить через replace одинарные кавычки на двойные (так себе).
3) Можете использовать эту либу https://github.com/json5/json5 (уже лучше).
4) Постучать по голове back-end, чтобы выдавал нормальный JSON (идеальный вариант).
Ответ написан
@Interface
а что вы вообще ожидаете увидеть как результат этой JSON.constructor({...}) операции?

Вызов JSON.constructor - это вызов конструктора объекта window.JSON (window.JSON - простой объект, а не класс например). При этом его конструктором является Object.

Т. е. JSON.constructor({...}) эквивалентно Object({...})

Вызов Object() - вернет либо объект, либо "коробочное" значение примитива:
Object(true) === true // false

Чтобы преобразовать объект к строке - вам нужно использовать JSON.stringify, из строки в объект - JSON.parse.

Чтобы JSON работал с одинарными кавычками (не понятно зачем оно вам) - можно использовать либы подобные этой https://json5.org/
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BRAGA96
@BRAGA96
У вас не валидный JSON, без двойных кавычек. Это даже не JSON а Javascript объект.
JSON.parse(JSON.stringify({'id': 50, 'text': 'j', 'datetime': '2018-07-04 12:15:56.154427+00:00', 'sender': 'test', 'thread': 1}))


Можете сразу при парсе обработать дату сделав из строки объект даты:
var string = JSON.stringify({'id': 50, 'text': 'j', 'datetime': '2018-07-04 12:15:56.154427+00:00', 'sender': 'test', 'thread': 1});
var object = JSON.parse(string, function(key, value) {
	return key === 'datetime' ? new Date(value) : value;
});
Ответ написан
@Gaba-Zhaba
вот такой вариант:
const toJSON = {'id': 50, 'text': 'j', 'datetime': '2018-07-04 12:15:56.154427+00:00', 'sender': 'test', 'thread': 1}
console.log(JSON.stringify(toJSON))

const fromJSON = JSON.stringify(toJSON)
console.log(JSON.parse(fromJSON))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы