2013-06-06 103 views
0

我必須將文本文件轉換爲json格式。該文本文件是這樣的:通過刪除逗號將文本文件格式化爲json

[ { 
    "rule": "soi", 
    "val": [ 
     { 
      "abc": "OT01", 
      "del": 15 
     }, 
     { 
      "abc": "OT11", 
      "del": 15 
     }, 
     { 
      "abc": "OT20", 
      "del": 15 
     }, 

    ], 
    "ion": "OT" 
}, 
{ 
    "rule": "soi", 
    "val": [ 
     { 
      "abc": "UF01", 
      "del": 15 
     }, 
        { 
      "abc": "UF08", 
      "del": 15 
     }, 
    ], 
    "ion": "UF" 
}, 
{ 
    "rule": "soi", 
    "val": [ 
     { 
      "abc": "UO01", 
      "del": 15 
     }, 

     { 
      "abc": "UO08", 
      "del": 15 
     }, 
     { 
      "abc": "UO09", 
      "del": 15 
     }, 
     { 
      "abc": "UO10", 
      "del": 15 
     }, 
     { 
      "abc": "UO20", 
      "del": 15 
     }, 
    ], 
    "ion": "UO" 
} ] 

所以基本上我只想行],之前刪除,。任何想法在bash中使用awksed來做到這一點?

+0

這是很好的,你發佈你想改變的文件,但[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – AlexLordThorsen

+0

@Rawrgulmuffins這幾乎是文件。除了JSON之外,這些逗號都是「],」之前的逗號。我可以用Java來做到這一點,但如果可能的話,我想做些簡短而又甜蜜的事情。我可以使用awk:awk'/]/{print a} {a = $ 0}'輸入文件訪問和打印這些行,但我不知道如何更新行而不是打印。 – user2133455

+0

啊,你說{打印a >>「some_file.json」},它會將輸入從打印重定向到文件。 – AlexLordThorsen

回答

0

下面是一個簡單sed腳本,可以做你想做的:

#!/bin/sed -rf 
:begin 
$!{ 
    N 
    bbegin 
} 
s/,(\s*\],)/\1/g 

使用chmod使其可執行文件,那麼你就可以運行它:./sedscript myfile。請記住sed實際上不會修改文件,只是將修改後的文本輸出到標準輸出,因此您需要IO重定向來收集文件中的更改。

+0

這工作。謝謝。 – user2133455

0

如果你不在乎換行,空格和縮進,你可以使用JavaScript interperter爲你做的工作:

echo "print(JSON.stringify(" `cat jsonfile.txt` "));" | js | tee jsonfile.txt