2016-01-22 2 views
3

У меня проблема с хранением данных JSON в таблице MySQL с помощью NodeJS.Хранить данные JSON в таблице MySQL

JSON данных выглядит следующим образом:

{ 
    "header": 
    { 
     "file1":0, 
     "file2":1, 
     "subfiles":{ 
      "subfile1":"true", 
      "subfile2":"true", 
     } 
    }, 

    "response": 
    { 
     "number":678, 
     "start":0, 
     "docs":[ 
      { 
       "id":"d3f3d", 
       "code":"l876s", 
       "country_name":"United States", 
       "city":"LA" 
      }, 
      { 
       "id":"d2f2d", 
       "code":"2343g", 
       "country_name":"UK", 
       "city":"London" 
      } 
     ] 
    } 
} 

, и я хочу сохранить только поля в DOCS массива (или объекта ответа). Я пытаюсь получить данные и хранить в MySQL таким образом:

var express = require('express'); 
var mysql = require('mysql'); 
var request = require("request"); 

var app = express(); 

app.use('/', express.static('../client/app')); 
app.use('/bower_components', express.static('../client/bower_components/')); 

var server = require('http').createServer(app); 

var bodyParser = require('body-parser'); 
app.jsonParser = bodyParser.json(); 
app.urlencodedParser = bodyParser.urlencoded({ extended: true }); 

//mysql connection setup 
var connection = mysql.createConnection({ 
    host : "localhost", 
    port: "3306", 
    user : "root", 
    password : "root", 
    database : "db", 
    multipleStatements: true 
}); 

request('http://url.com', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    //console.log(body) // 
    } 

    var data = body.toString(); 

    console.log(string); 
    var query = connection.query('INSERT INTO table SET ?', data, function(err, result) { 
     // Finish 
    }); 
    console.log(query.sql); 
});   

server.listen(3000, function() { 
    'use strict'; 
}); 

В журнале я получил

INSERT INTO table SET '{\n \"header\":{\n \"file1\":0,\n \"file2\":1,\n \"subfiles\":{\n  \"subfile1\":\"true\",\n  \"subfile2\":\"true\"}},\n \"response\":{\"number\":678,\"start\":0,\"docs\":[\n  {\n  \"id\":\"d3f3d\",\n  \"code\":\"l876s\",\n.... 

выходного сообщения, но у меня нет данных в MySQL таблицы. Нужно ли указывать каждый столбец в запросе?

ответ

3

на ваш комментарий //Finish вы должны были добавить console.log(err), чтобы узнать, почему данных не было.

Здесь решение:

var data = JSON.parse(body); 
var responseJson = JSON.stringify(data.response); 

var query = connection.query('INSERT INTO table SET column=?', responseJson, function(err, result) { 
    if(err) throw err; 
    console.log('data inserted'); 
}); 
+0

Хорошо, тогда мне нужно вставить данные, хранящиеся в responseJson. Нужно ли определять все столбцы в sql-запросе (у меня все еще нет данных в db)? Например, 'connection.query (" INSERT INTO table VALUES ('',?,?,? ...), [id, country_name, city ....], function (err, rows, fields) ' – corry

+1

@ corry: Я думаю, вы можете использовать один из них: 'query ('INSERT INTO tbl_name (col) VALUES (?)', 'value')' или 'query ('INSERT INTO tbl_name SET col =?', 'value') 'или ' query ('INSERT INTO tbl_name SET?', {col: 'value'}) ' –

+0

Я пытаюсь вставить данные в db [как описано здесь] (http://stackoverflow.com/questions/8899802/how-do-i-do-a-bulk-insert-in-mysql-using-node-js? lq = 1), и я получил сообщение об ошибке 'Ошибка: ER_PARSE_ERROR: у вас возникла ошибка в синтаксисе SQL; руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' {{\ "id \": \ "d3f3d \", \ "code \": \ "'в строке 1.' Определяется запрос:' var sql = "INSERT INTO table (id, code, country_name, city) VALUES?"; 'Вы знаете, где может быть причина проблемы? Спасибо. – corry

Смежные вопросы