Показать сообщение отдельно
  #1 (permalink)  
Старый 30.07.2016, 22:10
Аспирант
Отправить личное сообщение для user71 Посмотреть профиль Найти все сообщения от user71
 
Регистрация: 30.07.2016
Сообщений: 41

Как записать JSON объект в mysql таблицу.
Доброго времени суток!
Пишу приложение на js для node js. Суть программы: подключаемся к сайту по http, делаем запрос, получаем json объект, записываем его в mysql. Для запросов использую модуль "request" тут проблем никаких нет. typeof (body) Object. А вот дальше я не знаю что с ним делать. Дело в том что этот body представляет из себя массив вложенных объектов(массив объектов некоторые из свойства которых тоже объекты со своими свойствами). Имена свойств объектов не совпадают с именами таблиц и прежде чем поместить в таблицу некоторые свойства нужно сложить.
Я прочитал про jsonrevived там говорится о переопределении типов значений свойств объектов, а вот можно ли полностью переписать весь массив объектов, поменять его структуру, имена свойств итд? примеров не нашел. Такое вообще возможно?
За неимением лучшего я просто создал конструктор объекта который соответствует mysql таблицам и в цикле скопировал в новый массив объектов уже без вложений. Как теперь его вставить в sql insert? , будучи просто закинутым sql не распознает в этом строки и таблицы, а в цикле перебирать массив не получается потому что sql.query асинхронная функция она не видит перебора только последнее значение. Как быть.
собственно сам код
function flf (key, value) {
	if (key == 'c') return (value = Boolean(value));
	if (key == 'f') return new Date(value*1000);
return value;
};
function molotapi(){ req({ url : url,json : true,jsonReviver : flf},function(error,response,body){
	if(!error && response.statusCode == 200)
	{
		var pet = [];
		for (var i in body.response)
		{
			pet[i] = new SuperPet(
			body.response[i].a+" "+body.response[i].b, 
			body.response[i].e.f, 
			body.response[i].d, 
			body.response[i].c, 
			body.response[i].hasOwnProperty("v"),
			body.response[i].e.p);
		};
		
		
		console.log(pet);
		client.getConnection(function(error,connection){
		connection.query('INSERT INTO pets SET ?',pet, function(error,result){if(error) console.log(error); connection.release() });
		
		});
		
	}

});};
var timer = setInterval(molotapi,300000);
Ответить с цитированием