mysql - 将 JSON 数据存储在 MySQL 表中

标签 mysql json node.js

我在使用 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"
            }
        ]
    }
}

我只想将字段存储在文档数组(或响应对象)中。 我正在尝试以这种方式获取数据并存储在 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 表中没有数据。 我需要指定查询中的每一列吗?

最佳答案

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

关于mysql - 将 JSON 数据存储在 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34950357/

相关文章:

mysql - 存储 ID 列表 mysql

node.js - 在 NodeJS 中列出 Azure 中的所有资源

node.js - 在 node.js 中使用异步或同步 bcrypt 函数来生成哈希值?

mysql - C程序通过mysql拉取

php - 提交按钮影响的不仅仅是一行

mysql - SQL从多个表中获取值然后对其进行排序

java - 反序列化 JSON 对象

java - 使用 GSON 解析 JSON,类问题

javascript - 从标题获取维基百科 pageid

node.js - node-dev 未安装且仅运行一次