2016-11-03 44 views
0

我有一個大約1 MB的JSON文件(menu.json)。其中有很多屬性,我希望刪除。清理JSON - 使用Ruby去除不必要的屬性

我有一個文本文件:Strings.txt - 這包含的在JSON

我想通過我行JSON文件行迭代需要注意到屬性的名稱。如果一行包含strings.txt中的字符串,我想刪除該行。

這裏是我的代碼:

tmp = File.open('clean.json', 'w') 

File.open('menu.json') do |json| 
    File.open('strings.txt') do |x| 
     tmp.puts json.each_line unless json.include? x 
    end 
end 

寫入到clean.json是結果#<Enumerator:0x0077ff36b04b468>

可能有人請告訴我,我做錯了什麼?這是我的第一個Ruby腳本。

內容的strings.txt

Item1 
Item2 
Item3 

原來項目1,項目2或項目3都被解讀爲\\「Item1的\\」

我要弄清楚爲什麼發生這種情況,以及如何來處理它。

+0

什麼是'menu.json'和'strings.txt'。預期的結果是什麼? –

+0

strings.txt包含一個屬性名稱後跟一個回車符。 menu.json是1MB的json文件,我希望刪除的行包含strings.txt中的屬性名稱 –

+0

那麼,這幾乎告訴我什麼(幾乎)。修剪你的文件並粘貼問題。 –

回答

0

each_line沒有塊返回一個枚舉器,這就是你正在寫入你的輸出文件。你需要的是更多的東西是這樣的:

tmp = File.open('clean.json', 'w') 

File.open('menu.json') do |json| 
    File.open('strings.txt') do |x| 
    json.each_line { |line| tmp.puts(line) unless line.include?(x) } 
    end 
end 
tmp.close 

這顯然是相當昂貴的,因爲它會經過所有的menu.json正是多次strings.txt有線條。

+0

出於某種原因,所有正在寫入clean.json的是[。 strings.txt只在每一行中包含一個字符串,所以我目前不確定爲什麼會發生這種情況。 –

+0

鑑於您對這種昂貴的性質的專業建議,我想以不同的模式繼續前進。你會如何解決這個問題?使用bash來循環sed? –

+0

嘗試使用'jq':https://stedolan.github.io/jq/另外,除非我們看到至少幾行'strings.txt',否則恐怕我無法幫助您更多地使用Ruby實現。和所有的'menu.json'。 –

相關問題