json數據轉csv(json數據轉成對象)

本文目錄一覽:

如何將 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”.

在pycharm中怎麼把json文件轉換為csv

由於工作需要,經常需要將mysql數據庫中的數據導出到excel表格,或者需要將excel表格數據導入到mysql數據庫,我的方法是先將它們都轉換成一種中間數據格式csv(execl數據可以直接導出為csv格式,csv格式也可以直接用excel打開)。下面介紹一下操作步驟:csv導入mysqlloaddatainfile’C:\\Users\\UserName\\Desktop\\test.csv’intotable`table`fieldsterminatedby’,’optionallyenclosedby'”‘escapedby'”‘linesterminatedby’\n’;mysql導入csvselect*from`table`loaddatainfile’C:\\Users\\UserName\\Desktop\\test.csv’fieldsterminatedby’,’optionallyenclosedby'”‘escapedby'”‘linesterminatedby’\n’;如果亂碼,可用相關編輯器打開.csv文件,另存為utf-8的csv

如何將CSV格式轉換成JSON格式

# 下面的工具可以方便的將CSV格式文件轉換成json文件格式

import sys, json

tip = “””

請確保:

1. CSV格式是UTF-8

2. CSV第一行是鍵值

用法:

python csv2json.py foobar.csv

其中foobar.csv是需要轉換的源數據文件

運行環境:

Python 3.4.3

日期:

2015年12月29日

“””

print(tip)

# 獲取輸入數據

input_file = sys.argv[1]

lines = open(input_file, “r”, encoding=”utf_8_sig”).readlines()

lines = [line.strip() for line in lines]

# 獲取鍵值

keys = lines[0].split(‘,’)

line_num = 1

total_lines = len(lines)

parsed_datas = []

while line_num total_lines:

values = lines[line_num].split(“,”)

parsed_datas.append(dict(zip(keys, values)))

line_num = line_num + 1

json_str = json.dumps(parsed_datas, ensure_ascii=False, indent=4)

output_file = input_file.replace(“csv”, “json”)

# write to the file

f = open(output_file, “w”, encoding=”utf-8″)

f.write(json_str)

f.close()

print(“解析結束!”)

如何將json的數據轉化成csv的數據格式

請問你是在什麼語言中?是js對象弄到java對象還是java發過來在頁面中看到的?還是其他語言c#php?如果是js到java可以用google的gson很簡單如果是java發的js給頁面直接循環就可以拿到了

如何用python將包含多個表格的json數據轉化為多個csv表格輸出

csv就是個普通的文本文件。不存在多個sheet。所以:沒法導出帶多個sheet的csv文件。詳見:【記錄】使用Python讀取/導出(寫入)CSV文件帶多個sheet的,是excel文件。用python導出,帶多個的excel,說實話我沒弄過。但是弄過單個sheet的

如何將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(簡書作者)

原文鏈接:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/285327.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:44
下一篇 2024-12-22 15:44

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29

發表回復

登錄後才能評論