2016-11-03 22 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'。 –

相关问题