在 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 数据的主要内容,如果未能解决你的问题,请参考以下文章