2016-08-09 4 views
0

私は、複数のJSONオブジェクトを含むファイルをCSVに変換する作業を行っています。少しでも簡単にするために、オブジェクトを取得して1つのオブジェクトにすることで、より簡単に解析できるようにしました。ここに私の問題があります:データファイルはコンマのない配列の束なので、私はflattenメソッドを使うことができません。 データファイルは、次のようなものになります。あなたが見ることができるように1つのファイル内に複数のJSONオブジェクトがあります.gsubを使用して1つのオブジェクトに変換できますか?

[{"field1": "sample1", "field2":"sample2"}] 
[{"field3":"sample3", "field4":"sample4"}] 

を、それはそれらの間にはカンマで配列の束です。

私の考えは、各アレイを通過し、 "] ["と "、"のインスタンスを置き換えて、私のプログラムでそのように解析するようにします。

だから私の目標は、ファイルは次のようになり持っていることです。

[{"field1": "sample1", "field2":"sample2"}, {"field3":"sample3", "field4":"sample4"}] 

私が使用しようとしてきたコードは次のとおりです。

data.gsub(/\s(?=[\]\[]), ","/) 

私は、これは何かであるかなり確信しています私の正規表現で表現する。私は他の正規表現を使ってみましたが、実際には私が必要とすることをしているようには見えません。

これだけでは機能しません。私はスキャンや挿入を試みることも考えていましたが、gsubはそれらの内側の括弧を取り除き、カンマで置き換える最も良い方法のようでした。

JSONオブジェクトで.foreachループを試してみることをお勧めする人は、.foreachループが同じファイル内の別のオブジェクトを解析しないため、JSONオブジェクトではうまく動作しません。おそらく、実際には複数のJSONオブジェクトで実際に動作するメソッドが見つかりませんでしたが、誰かが動作するメソッドを持っていれば、それも試してみます。

答えて

0

あなたがする必要があることは、改行と改行が続く閉じ括弧を見つけることだけです。

data.gsub(']\n[', ',') 

希望の作品です!提案のための

+0

提案していただきありがとうございますが、動作していないようです。他のアイデア? –

+0

私は試して、それは正常に働いた。私があなたと同じページにいることを確認するために、すべての行が配列を含む文字列であるファイルがあります。私は正しい?あなたはそのファイルを含む要点を共有できますか?私はそれを解析しようとします。 –

+0

ありがとうございます。これは私が作業しているサンプルJSONへのリンクです:https://gist.github.com/anfperez/a73325cb05d41c4f0770c5115811e28a –

0
data.gsub(']\n[', ',') 

おかげで、それが動作していないようです。唯一二重引用符で囲まれた文字列式は、バックスラッシュ記法と補間の対象となっているので、このようにそれは

data.gsub("]\n[", ',') 

にする必要があります

--------

メイン相違点は二重引用符で囲まれたStringリテラルが文字列の補間とエスケープシーケンスの完全なセットをサポートしていることです。

例えば、彼らは補間を経由して、任意のRubyの式を含めることができます。

# Single-quoted strings don't support interpolation 
puts 'Now is #{Time.now}' 
# Now is #{Time.now} 

# Double-quoted strings support interpolation 
puts "Now is #{Time.now}" 
# Now is 2016-07-21 12:43:04 +0200 

二重引用符で囲まれた文字列もentire set of escape sequences"\n""\t"含むサポート...

puts 'Hello\nWorld' 
# Hello\nWorld 

puts "Hello\nWorld" 
# Hello 
# World 

...単一引用符で囲まれた文字列が有用である単一引用符で囲まれた文字列のために必要な最小限のセットむき出し、エスケープシーケンスをサポートしていない間:それぞれリテラル単一引用符やバックスラッシュ、'\'''\\'を。

関連する問題