Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Store JSON data in MySQL table

I have a problem with storing JSON data in MySQL table using NodeJS.

JSON data looks like this:

{
    "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"
            }
        ]
    }
}

and I want to store only fields in docs array (or response object). I'm trying to get data and store in mysql in this way:

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';
});

In log I got

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.... 

output message, but I don't have data in MySQL table. Do I need to specify every column in query?

like image 539
corry Avatar asked Oct 22 '25 06:10

corry


1 Answers

at your //Finish comment you should have added some console.log(err) to see why there was no data inserted.

Here the solution:

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');
});
like image 76
Roland Starke Avatar answered Oct 23 '25 21:10

Roland Starke



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!