2016-05-13 7 views
2

大量のJSONオブジェクトを含むテキストファイルがあります。オブジェクトに新しい行や区切り文字を付けて作成されていません。Perlはすべての間に新しい行を挿入} {match

perl -e '$/ = "}{"; print "$_\n" while <>' file.txt > out.txt 

をしかし、これはファイルはJSONオブジェクトが{文字の後に置かれます新しい行として開口部{を失われます新しい行に分割されます場合など、不正なデータが発生します。

現在、私は使用しています。

}\n{のような}{の一致の間に改行を挿入する方法はありますか?

ファイルがかなり大きいので、私は手動でそれを行うことはできません。

Perlにする必要はありませんが、タスクに適したものにすることができます。

+0

テスト用の入力例を投稿してください。 –

+0

また、どのくらいの頻度でこれを行う必要がありますか?コードエディタの機能やプラグインは、このトリックを行うだろうか? EclipseとSublime Textでこれを行うことができます。チャンスはNotepad ++であり、その他も同様です。 –

+1

質問は、有効ですか? json_xsはそうは思わない... 'cat json.json | json_xs -f json -t json-pretty'は/ home/foo /にあるJSONオブジェクトのあとに文字オフセット13( "{" bar ":" baz "} {" bo ":" ... " ... ' – simbabque

答えて

7

printを実行しないでください。 }{の間に改行を入れてください。 whileにはブロックが必要です。最後にs///が失敗するため、s/// && print while <>を実行しても機能しません。

$ cat json.json 
{"foo":"bar"}{"bar":"baz"}{"bo":"shizzle"} 
$ perl -e '$/ = "}{"; while (<>) { s/\}\{$/}\n{/; print; }' json.json 
{"foo":"bar"} 
{"bar":"baz"} 
{"bo":"shizzle"} 
1
$ cat in.json 
{"a":"b","c":"d"}{"e":"f","g":"h"} 

$ perl -MJSON::XS -0777ne' 
    my $parser = JSON::XS->new->utf8; 
    $parser->incr_parse($_); 
    while (my $obj = $parser->incr_parse()) { 
     print($parser->encode($obj), "\n"); 
    } 
' in.json 
{"c":"d","a":"b"} 
{"e":"f","g":"h"} 
-1
$ echo '{"a", "b", "c"}{42, "omg", "nyan"}{"no", "please", "stop"}' | perl -e '$/ = "}"; $\ = "}\n"; chomp and print while <>' 
{"a", "b", "c"} 
{42, "omg", "nyan"} 
{"no", "please", "stop"} 
+0

'{" foo ":{" bar ":" baz "}}'のようなネストされたオブジェクトでは動作しません。 "a"、 "b"、 "c"} ')は有効なJSONではありません – ThisSuitIsBlackNot

+0

まだ回答はありませんか? – bipll

+0

そのデータ内のオブジェクトを削除します。 – ThisSuitIsBlackNot

-1

あなたは検索して、手動でそれを行うとツールを置き換えることができます。 例: 検索: "} {" "}^p {"(Word^pは改行)

関連する問題