【问题标题】:Store JSON data in MySQL table在 MySQL 表中存储 JSON 数据
【发布时间】:2016-04-29 06:27:09
【问题描述】:

我在使用 NodeJS 在 MySQL 表中存储 JSON 数据时遇到问题。

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 表中没有数据。 我需要指定查询中的每一列吗?

【问题讨论】:

    标签: mysql json node.js


    【解决方案1】:

    在您的 //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');
    });
    

    【讨论】:

    • 好的,那我需要插入responseJson中存储的数据。我是否需要在 sql 查询中定义所有列(我在 db 中仍然没有数据)?例如connection.query("INSERT INTO table VALUES('',?,?,?...)",[id, country_name, city....],function(err, rows, fields)
    • @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'})
    • 我正在尝试将数据插入 db as explained here,但出现错误 Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''[{\"id\":\"d3f3d\",\"code\":\"' at line 1。查询已定义:var sql = "INSERT INTO table (id, code, country_name, city) VALUES ?"; 你知道问题的原因可能在哪里吗?谢谢。
    • 但是现在如何调用没有所有反斜杠的 JSON?
    猜你喜欢
    • 2012-05-06
    • 2013-03-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2013-07-13
    相关资源
    最近更新 更多