在 MySQL 表中存储 JSON 数据

Posted

技术标签:

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

我在使用 NodeJS 时遇到问题。

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

【问题讨论】:

【参考方案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?

以上是关于在 MySQL 表中存储 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 数据库中存储 JSON 字符串

Pyspark:将数据帧作为 JSON 存储在 MySQL 表列中

Mysql存储JSON字符串(数组)的操作

php用jquery添加多条数据,用json存储mysql

将用户数据存储在服务器上的 JSON 文件中

如何将json中的数据存储在sql表中(python)