您的位置:

如何把json文件转化成mysql(json文件转json对象)

如何把json文件转化成mysql(json文件转json对象)

更新:

本文目录一览:

如何将JSON,Text,XML,CSV数据文件导入MySQL

如何将 JSON,Text,XML,CSV 数据文件导入 MySQL

可以使用load命令,先处理数据内容,保存为txt文件(文件格式为:字段之间用','分隔,每一行用'\n'结尾即换行符(回车)结尾)

LOAD DATA INFILE "路径/data.txt" INTO TABLE my_table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';上述语句意思为:

将data.txt文件导入到my_table 中,约定字段分隔符为',',行分隔符为'\n'

如何将 JSON,Text,XML,CSV 数据文件导入 MySQL

将外部数据导入(import)数据库是在数据库应用中一个很常见的需求。其实这就是在数据的管理和操作中的ETL

(Extract,

transform,

load)的L

(Load)部分,也就是说,将特定结构(structure)或者格式(format)的数据导入某个目的地(比如数据库,这里我们讨论MySQL)。

ETL

Process

本文要讨论的内容,是如何方便地将多种格式(JSON,

Text,

XML,

CSV)的数据导入MySQL之中。

本文大纲:

将Text文件(包括CSV文件)导入MySQL

将XML文件导入MySQL

将JSON文件导入MySQL

使用MySQL

workbench的Table

Data

Export

and

Import

Wizard进行JSON或CSV文件的导入导出

1.

将Text文件(包括CSV文件)导入MySQL

这里我们的讨论是基于一个假定,Text

file和CSV

file是有着比较规范的格式的(properly

formatted),比如说每行的每个数据域(field)之间是由一个共同的分隔符(比如tab:

\t)分隔的。

那么首先,你需要根据你的数据的格式(有哪些域),来设计好数据库的对应的表

(的Schema)。

举个例子,要处理的Text文件或者CSV文件是以\t作为分隔符的,每行有id,

name,

balance这么三个数据域,那么首先我们需要在数据库中创建这个表:

CREATE

TABLE

sometable(id

INT,

name

VARCHAR(255),

balance

DECIMAL(8,4));

创建成功以后就可以导入了。操作方式很简单:

LOAD

DATA

LOCAL

INFILE

'你的文件路径(如~/file.csv)'

INTO

TABLE

sometable

FIELDS

TERMINATED

BY

'\t'

[ENCLOSED

BY

'"'(可选)]

LINES

TERMINATED

BY

'\n'

(id,

name,

balance)

这里要注意的是,我们需要开启local-infile这个MySQL的配置参数,才能够成功导入。究其原因,从MySQL的Manual中可以看到这么一段话:

LOCAL

works

only

if

your

server

and

your

client

both

have

been

configured

to

permit

it.

For

example,

if

mysqld

was

started

with

--local-infile=0,

LOCAL

does

not

work.

See

Section

6.1.6,

“Security

Issues

with

LOAD

DATA

LOCAL”.

如何将JSON,Text,XML,CSV 数据文件导入 MySQL

将外部数据导入(import)数据库是在数据库应用中一个很常见的需求。其实这就是在数据的管理和操作中的ETL (Extract, transform, load)的L (Load)部分,也就是说,将特定结构(structure)或者格式(format)的数据导入某个目的地(比如数据库,这里我们讨论MySQL)。

ETL Process

本文要讨论的内容,是如何方便地将多种格式(JSON, Text, XML, CSV)的数据导入MySQL之中。

本文大纲:

将Text文件(包括CSV文件)导入MySQL

将XML文件导入MySQL

将JSON文件导入MySQL

使用MySQL workbench的Table Data Export and Import Wizard进行JSON或CSV文件的导入导出

1. 将Text文件(包括CSV文件)导入MySQL

这里我们的讨论是基于一个假定,Text file和CSV file是有着比较规范的格式的(properly formatted),比如说每行的每个数据域(field)之间是由一个共同的分隔符(比如tab: \t)分隔的。

那么首先,你需要根据你的数据的格式(有哪些域),来设计好数据库的对应的表 (的Schema)。

举个例子,要处理的Text文件或者CSV文件是以\t作为分隔符的,每行有id, name, balance这么三个数据域,那么首先我们需要在数据库中创建这个表:

CREATE TABLE sometable(id INT, name VARCHAR(255), balance DECIMAL(8,4));

创建成功以后就可以导入了。操作方式很简单:

LOAD DATA LOCAL INFILE '你的文件路径(如~/file.csv)' INTO TABLE sometable FIELDS TERMINATED BY '\t' [ENCLOSED BY '"'(可选)] LINES TERMINATED BY '\n' (id, name, balance)

这里要注意的是,我们需要开启local-infile这个MySQL的配置参数,才能够成功导入。究其原因,从MySQL的Manual中可以看到这么一段话:

LOCAL works only if your server and your client both have been configured to permit it. For example, if mysqld was started with --local-infile=0, LOCAL does not work. See Section 6.1.6, “Security Issues with LOAD DATA LOCAL”.

这是MySQL出于安全考虑的默认配置。因此,我们需要在配置文件my.cnf中(以Debian发行版的Linux, 如Ubuntu为例, 即是在/etc/my.cnf中),确保:

local-infile=1

抑或是在命令行启动MySQL时加上--local-infile这一项:

mysql --local-infile -uroot -pyourpwd yourdbname

此外,我们也可以使用MySQL的一个官方导入程序mysqlimport ,这个程序本质上就是为LOAD DATA FILE提供了一个命令行的interface,很容易理解,我们这里就不再详述。

2. 将XML文件导入MySQL

这件事的完成方式,与我们的XML的形式有着很大的关系。

举个例子说,当你的XML数据文件有着很非常规范的格式,比如:

?xml version="1.0"?

row

field name="id"1/field

field name="name"Free/field

field name="balance"2333.3333/field

/row

row

field name="id"2/field

field name="name"Niki/field

field name="balance"1289.2333/field

/row

或者

row column1="value1" column2="value2" .../

我们就可以很方便使用LOAD XML来导入,这里可以参见MySQL的官方手册--LOAD XML Syntax。

然而我们可能有另外一些需求,比如说,我们可能会想要将XML文件的域映射到不同名字的列(TABLE COLUMN)之中。这里要注意,MySQL v5.0.7以后,MySQL的Stored Procedure中不能再运行LOAD XML INFILE 或者LOAD DATA INFILE。所以转换的程序(procedure)的编写方式与在此之前有所不同。这里,我们需要使用Load_File()和ExtractValue()这两个函数。

以下是一个示例XML文件和程序:

文件:

?xml version="1.0"?

some_list

someone id="1" fname="Rob" lname="Gravelle"/

someone id="2" fname="Al" lname="Bundy"/

someone id="3" fname="Little" lname="Richard"/

/some_list

程序:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `import_some_xml`(path varchar(255), node varchar(255))

BEGIN

declare xml_content text;

declare v_row_index int unsigned default 0;

declare v_row_count int unsigned;

declare v_xpath_row varchar(255);

set xml_content = load_file(path);

-- calculate the number of row elements.

set v_row_count = extractValue(xml_content, concat('count(', node, ')'));

-- loop through all the row elements

while v_row_index v_row_count do

set v_row_index = v_row_index + 1;

set v_xpath_row = concat(node, '[', v_row_index, ']/@*');

insert into applicants values (

extractValue(xml_content, concat(v_xpath_row, '[1]')),

extractValue(xml_content, concat(v_xpath_row, '[2]')),

extractValue(xml_content, concat(v_xpath_row, '[3]'))

);

end while;

END

在MySQL中,使用它进行导入:

call import_some_xml('你的XML文件路径', '/some_list/someone');

程序相当的直白,只要了解一下MySQL的脚本编写即可。

这里提一下DELIMITER $$。我们知道MySQL的命令分隔符默认为分号,然而脚本中很显然是有分号的,但是我们并不希望立即执行,所以我们需要临时更改分隔符。

3. 将JSON文件导入MySQL

如何将JSON文件导入MySQL中,是一个很有趣的话题。JSON是一种现在相当常用的文件结构,所以掌握它的导入具有比较广泛的意义。

很多时候,我们处理的JSON数据是以如下形式出现的:

{"name":"Julia","gender":"female"}

{"name":"Alice","gender":"female"}

{"name":"Bob","gender":"male"}

{"name":"Julian","gender":"male"}

而并不是规整的[{},{},{},{}](一些NoSQL数据库的Export)。

这样的形势对于载入有一个好处:因为每一行是一个JSON Object,所以我们便可以按行处理此文件,而不需要因为JSON的严格结构将整个文件(比如一个许多G的.json文件)全部载入。

方式一 使用common-schema

common-schema是一个应用很广泛的MySQL的框架,它有着很丰富的功能和详细的文档。我们可以使用它的JSON解析的功能。(它还具有JSON转换成XML等等方便的功能)

具体说来,将common-schema导入之后,使用它的extract_json_value函数即可。源码中:

create function extract_json_value(

json_text text charset utf8,

xpath text charset utf8

) returns text charset utf8

该函数接受两个参数,一个是json_text,表示json文件的内容,另一个是xpath,表示数据的结构(这里可以类比XML文件的处理)。很多读者应该知道,XPath是用来对XML中的元素进行定位的,这里也可以作一样的理解。

以本段开始的几行JSON为例,这里common-schema的使用如下例:

select common_schema.extract_json_value(f.event_data,'/name') as name, common_schema.extract_json_value(f.event_data,'/gender') as gender, sum(f.event_count) as event_count from json_event_fact f group by name, gender;

关于event_data,我们需要先理解LOAD DATA INFILE是一个event,不同的event type对应不同的event data。这部分知识可以参看Event Data for Specific Event Types

如果感兴趣,可以参看其源码。参看一个受到广泛使用的项目的源码,对于自身成长是很有益的。

当然了,我们也可以像之前处理XML文件导入一样,自己编写程序。这里便不再给出实例程序,有兴趣的读者可以自行编写或者跟笔者交流。

方式二 使用mysqljsonimport

这是Anders Karlsson的一个完成度很高的作品。这一份程序由C写成。它依赖于一个JSON Parser,Jansson。他们都有着比较好的维护和文档,所以使用上体验很好。

mysqljsonimport的下载在SourceForge上。具体使用参照其文档即可。

为了方便不熟悉源码安装的朋友,笔者在这里提一下安装流程和注意事项。

安装命令顺序如下:

$ wget

$ tar xvfz mysqljsonimport-1.6.tar.gz

$ cd mysqljsonimport-1.6

$ ./configure –-with-mysql=/xxx/mysql

$ make

$ make check

$ sudo make install

--with-mysql这一步不是必要的,只要你安装的mysql的路径是系统的默认路径。很关键的,而且很容易被不熟悉的朋友忽略的是,这一个C程序要成功编译和运行,是需要MySQL的C API的,所以需要安装的依赖,除了jansson,还有libmysqlclient-dev。

jansson的安装就是简单的源码安装,libmysqlclient-dev则可以使用包管理工具(比如ubuntu中使用apt-get即可;编译和安装前,建议先sudo apt-get update以避免不必要的麻烦)。

导入命令:

$ ./mysqljsonimport –-database test –-table tablename jsonfilename

还有一个parser,作者是Kazuho,感兴趣的读者可以参看一下,他的相关博文是mysql_json - a MySQL UDF for parsing JSON ,github项目是mysql_json。

4. 使用MySQL workbench

Workbench这个工具对于许多不熟悉SQL语言或者命令行的朋友还是很方便和友好的。利用它,可以方便地导入和导出CSV和JSON文件。

具体操作图例参见MySQL官方手册即可:Table Data Export and Import Wizard,这里不再赘述。

文/freenik(简书作者)

原文链接:

如何将从接口取到的json数据存入mysql数据库

json的数据json.loads进来以后会变成一个json的对象,你需要自己把python对象中的字段值取出来,拼成sql语句

你可以把这个过程封装成一个函数

import json

def save_json(json_str):

obj = json.loads(json_str)

sql = 'insert into tbl values ("%s")' % obj['id'] #这里注意编码,要转成数据库的编码格式

#blabla

如何把json文件转化成mysql(json文件转json对

本文目录一览: 1、如何将JSON,Text,XML,CSV数据文件导入MySQL 2、如何将 JSON,Text,XML,CSV 数据文件导入 MySQL 3、如何将JSON,Text,XML,CS

2023-12-08
json数据转csv(json数据转成对象)

本文目录一览: 1、如何将 JSON,Text,XML,CSV 数据文件导入 MySQL 2、在pycharm中怎么把json文件转换为csv 3、如何将CSV格式转换成JSON格式 4、如何将jso

2023-12-08
json对象转化为java对象(java将对象转成json)

本文目录一览: 1、非常复杂的一个json串,怎么转成java对象? 2、怎么将json对象转换成一个java对象 3、json字符串怎么转换为java对象 4、json字符串怎么转换为java对象?

2023-12-08
java对象转json顺序,将json对象转化为java对象

2022-11-26
js将json文件转xml文件,json文件转换成excel

2022-11-23
javabean转json的方法,java对象转json

本文目录一览: 1、android怎么将javabean转换成json 2、java中一个包含bean属性的list集合 如何转换成JSON 3、带有对象属性的bean,如何转换成json对象或者字符

2023-12-08
生成json文件,生成json文件打开没显示

本文目录一览: 1、java如何创建Json文件? 2、如何将json数据生成json文件格式 3、如何生成optional.json文件 4、PHP生成及获取JSON文件的方法 5、asp.net

2023-12-08
json字符串转clob(json字符串转换为Json对象

本文目录一览: 1、如何把这样的json串转换成对象 2、oracle clob xml json 3、java中json字符串怎么转json对象 4、如何把一个json文件转换成字符串 5、Orac

2023-12-08
python中json解析转换,python 对象转json

2022-11-25
java中对象和json互转,java string jso

2022-11-24
由php对象生成json字符串(json字符串转json对象

本文目录一览: 1、php怎么json数据转化为字符串 2、php转换成json数据格式 3、php对象转json字符串时如何排序 4、php如何将json对象转字符串 5、如何把对象转化为字符串 p

2023-12-08
json如何生成csv(json怎么生成)

本文目录一览: 1、如何将json的数据转化成csv的数据格式 2、如何将CSV格式转换成JSON格式 3、如何用python将包含多个表格的json数据转化为多个csv表格输出 4、在pycharm

2023-12-08
java如何创建json文件,怎么创建一个json文件

本文目录一览: 1、怎么用java编写json文件 2、用java生成json文件,怎么编写? 3、java后台如何生成.json文件 4、如何使用java创建json对象 5、java创建json文

2023-12-08
javajson转csv(Java json转对象)

本文目录一览: 1、如何将json的数据转化成csv的数据格式 2、java中怎么把json转换成对象数组 3、java将json格式转换嫒雖ysql的java脚本,有没有 4、如何将CSV格式转换成

2023-12-08
java对象转化成json,Java字符串怎么转为对象

2022-11-30
实例对象转换成json(什么是变换对象)

本文目录一览: 1、如何将 javascript 对象转换成 json字符串 2、怎么把一个对象list集合转换成json 3、如何将数据实体转换为 JSON 字符串 4、如何把一个对象转换为json

2023-12-08
将java对象转为json,将java对象转为json格式

2022-11-24
批量转换json文件(在线转换json)

本文目录一览: 1、如何将多个JSON文件合并? 2、怎么将excel文件转换json格式 3、有什么办法实现批量数据的json字符串转化 如何将多个JSON文件合并? 将这些json文件内容合并,然

2023-12-08
java把实体类转成json(java将实体类转为json)

本文目录一览: 1、java对象实体与json之间的转换 2、java实体类怎么转换成json。 3、java怎么把数据转成json 数组 4、如何将数据实体转换为 JSON 字符串 5、java中怎

2023-12-08
json和java转换,json数据转换为java对象

本文目录一览: 1、非常复杂的一个json串,怎么转成java对象? 2、json字符串怎么转换为java对象 3、如何把json数组转为java数组 4、如何实现JSON与JAVA数据的相互转换 5

2023-12-08