2012-12-11 73 views
0

我們目前已經由管道分隔的文本,它具有格式mysqlimport可以接受JSON輸入嗎?

field1:value1|field2:value2|...|fieldN:valueN\n 
field1:value1|field2:value2|...|fieldN:valueN\n 
etc. 

我有進口商腳本(bash中運行的Perl,然後mysqlimport的),目前從年初消除了幾句話的某些日誌每行,然後在生成的文本文件上運行mysqlimport。

我們正在將我們的日誌升級到輸出JSON的數據服務。導入器腳本仍然會將該JSON的內容導入到MySQL數據庫表中。這感覺像不好的形式採取這個漂亮的JSON,並將其轉換爲管道分隔文件與mysqlimport使用 - 但我有任何選擇?我在mysql文檔或論壇中找不到任何東西。

+0

事實證明,mysqlimport有很好的日誌輸出,我們的腳本使用下游來提供狀態電子郵件。我不願意接觸到這個過程的更多部分,而我正在添加JSON。畢竟,我實際上是將JSON解析爲管道分隔文件,以便與mysqlimport一起使用。 – barclay

回答

0

我寧願轉換的固體JSON平等固體,兼容SQL multiline insert statement一個mysqldump的:使用VALUES語法可以插入多行

INSERT語句。爲此,請包含多個列值列表,每個列表值都包含在括號內,並用逗號分隔。例如:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 

由於您使用Perl腳本無論如何,這應該不會造成太大的問題。

+0

這是我覺得非常愚蠢的事情之一,我沒有想到這個我自己。謝謝。 – barclay

0

只是一個友好的批評:對我來說,這是不好的轉換:

  • JSON字符串 - >管道分隔的數據 - >到管道分隔解析器 - >數據庫或
  • json文本字符串 - >到管道分隔的數據 - >到管道分隔符 - >到數組 - >到數據庫。

管道分隔的支持比json字符串小。

最好的辦法是將數據保存在json字符串中。

然後,你可以用任何你喜歡的編程語言來解析它。例如,把它放在一個數組中。然後,相應地將每個數組保存在數據庫中。

,如果這是你的公司使用,他們已經有一個管道分隔的解析器,如果他們已經正在建設一個,或者是你很難認爲(無論不可能的方式情況下,說服他們)。那麼,最好的辦法就是堅持一會兒。

如果你有時間,你自己,你可以可以建立自己的

  • JSON解析器 - >數組 - >數據庫應用程序。
  • json parser - >到數據庫應用程序。 (根據關鍵和價值)

這很容易。