2011-12-15 10 views
3

私は、私が読みたいRubyを解析するjavascriptアプリケーション用のjavascriptファイルを用意しています。このファイルの内容は、文字列化されたJSONではなく、javascriptで解析されたJSONデータ構造です。javascriptで解析されたJSONコンテンツをルビーに解析する方法

I.E.私のRubyのコードがある場合

require 'rubygems' 
require 'json' 
file = File.open("testing.js", 'r') 
json = file.readlines.to_s 
hash = JSON.parse(json) 

私testing.js

は、私が変更された場合、私はそれを読んしようと失敗します
{ 
    color:"blue" 
} 

...

JSON::ParserError: 751: unexpected token at '{ color:"blue" }' 

動作する場合でありますtesting.jsを文字列化されたjsonコンテンツに変換する

{ 
    "color":"blue" 
} 

rubyスクリプトを最初のフォーマット(文字列化されていない)で処理できるようにするにはどうすればよいのですか?ちょうど私のファイルの実際の本当の形式は

var setting = { 
    color: "blue" 
} 

であると私はちょうど

require 'rubygems' 
require 'json' 
file = File.open("testing.js", 'r') 
content = file.readlines.to_s 
json = content.split("= ",2)[1] 
hash = JSON.parse(json) 
を使用して解析するために「=」記号の右側を抽出しています

を明確にする

...

しかし、上記のエラーはJSON構造体の問題であるため同じです

答えて

1

私が知っている限り、jsonの宝石はそのような選択肢を許さない。問題は、ファイルが有効なJSである可能性がありますが、無効なJSONなので、JSONライブラリはそれを拒否する傾向があります。 2つの簡単な選択肢があります。

a)有効なJSONになるように修正します。手動で行うことも、値にコロンが含まれていない場合は、正規表現を使用することもできます。json.gsub!(/([a-zA-Z]+):/, '"\1":')

b)Ruby 1.9を使用している場合、それは有効なJSであるだけでなく、有効なRubyであるためevalです。セキュリティに関する懸念があることに注意してください。

+0

はい、私は問題を理解しています。このシナリオを処理するパーサを作成します。私は、JSONの宝石はすべてこれだけではできないことを認識しています。私はこのためにコンテンツを前処理するためにルビーコードを書きたいと思うし、誰かがこれまでにこれをしていたかもしれないと思った。 – Streamline

関連する問題