2014-08-27 64 views
0

Lorem存有是印刷和排版的只是一个虚拟的文本。 Lorem存有一直是标准的虚拟文本,自从16世纪,当一个未知的打印机采取了与字母组成棒和炒它做的字体目录。它已存活不仅五个世纪,但也几乎没有变化成电子排版。它是在20世纪60年代开始流行用含Lorem存有通道Letraset张的释放,以及最近与桌面排版软件,如奥尔德斯PageMaker中包括Lorem存有版本。如何合并论文3个JSON文件合并成一个单一的一个使用Ruby?

回答

1

如果我理解你如何作为论文文件合并,我认为有几个问题。

  1. 你需要保持第一指标的跟踪来获得与第一项目相关的第二项。
  2. 在第二级回路次数过多。

我的代码:

require 'json' 

def combine_all_categories(level = 1, args = {:invoker => :@category}) 
    @master_array = [] 

    first_from_zero = JSON.parse(IO.read('first_from_zero.json').scrub) 
    second_from_first = JSON.parse(IO.read('second_from_first.json').scrub) 
    third_from_second = JSON.parse(IO.read('third_from_second.json').scrub) 

    third_index = 0 
    first_from_zero['filterElementCommands'].each_with_index do |one, one_index| 
    @category = {} 

    @category['property'] = one['property'] 
    @category['value'] = one['value'] 
    @category['title'] = one['title'] 
    @category['numberOfItems'] = one['numberOfItems'] 
    @category['numberOfSubFilters'] = one['numberOfSubFilters'] 
    @category['images'] = one['images'] 
    @category['children'] = [] 

    second_from_first[one_index]['filterElementCommands'].each do |two| 
     @category_2 = {} 

     @category_2['property'] = two['property'] 
     @category_2['value'] = two['value'] 
     @category_2['title'] = two['title'] 
     @category_2['numberOfItems'] = two['numberOfItems'] 
     @category_2['numberOfSubFilters'] = two['numberOfSubFilters'] 
     @category_2['images'] = two['images'] 
     @category_2['children'] = [] 

     # Use third_index to retrieve the item from the third file. 
     third_from_second[third_index]['filterElementCommands'].each do |third| 
     # Build children.... 
     end 
     third_index += 1 

     @category['children'] << @category_2 
    end 

    @master_array << @category 
    end 

    File.open("combine.json", 'w') do |f| 
    f.write(@master_array.to_json) 
    end 
end 

缩略的输出,只是显示的标题:

[ 
    { 
    "title": "Aardappel, groente, fruit", 
    "children": [ 
     { 
     "title": "Aardappelen" 
     }, 
     ... 
    ] 
    }, 
    { 
    "title": "Verse kant-en-klaar maaltijden, salades", 
    "children": [ 
     { 
     "title": "Stoommaaltijden" 
     }, 
     ... 
    ] 
    }, 
    ... 
] 

一点题外话,在您发布的代码,你可以使用变量,他们不' t需要成为实例变量。例如,category而非@category

+0

我遇到一些麻烦与第三级。一些二级类别没有三级类别。但他们得到来自其他类别的众多追随者如何打破整个类别结构中增加。我用我用过的代码更新了这个问题。什么似乎是问题? – narzero 2014-08-28 11:17:45

+0

我错了'需要第三级two_index'。远眺third_from_second的数据,你只需要保持跟踪你在该文件是什么型号。 – 2014-08-28 15:25:34

+0

编辑的代码大约显示第三级别的代码是什么样子。 – 2014-08-28 15:30:06

1

我想这你想要做什么:

files = [ 
    File.open('json1.txt'), 
    File.open('json2.txt'), 
    File.open('json3.txt'), 
] 

File.open('combined_json.txt', 'w') do |f| 
    while (len = files.length) > 0 
    index = rand(len) 
    if line = files[index].gets 
     f.puts line 
    else 
     files.delete_at(index) 
    end 
    end 
end 

files.each do |f| 
    f.close 
end 


--output:-- 

[ 
    { 
{ 
     "filterElementCommands":[ 
     { 
    "filterElementCommands":[ 
     { 
     "property":"productTaxonomyLevel1.id", 
     "value":"6401", 
      "property":"productTaxonomyLevel3.id", 
      "value":"2341", 
     "title":"Aardappel, groente, fruit", 
[ 
     "numberOfItems":761, 
    { 
     "numberOfSubFilters":7, 
     "images":[ 
     "filterElementCommands":[ 
      { 
      "title":"Hele aardappel", 
       "width":198, 
       "height":198, 
     { 
      "property":"productTaxonomyLevel2.id", 
      "value":"1789", 
      "title":"Aardappelen", 
       "url":"#" 
      } 
      "numberOfItems":37, 
      "numberOfSubFilters":0, 
      "numberOfItems":87, 
      "numberOfSubFilters":8, 
      "images":[ 
      "images":[ 
     ], 
     "showGrid":true, 
       { 
        "width":200, 

        "height":200, 
      ], 
      "showGrid":false, 
      "frozen":false, 
        "url":"#" 
      "links":[ 
     "frozen":false, 
       } 

      ] 
     "links":[ 
     }, 
     { 
      "property":"productTaxonomyLevel3.id", 
      ], 
      "showGrid":false, 

      "frozen":false, 
     ] 
      "value":"5243", 
      "title":"Krieltjes", 
     }, 
      "numberOfItems":17, 
      "links":[ 
     { 
      "numberOfSubFilters":0, 
     "property":"productTaxonomyLevel1.id", 
     "value":"1301", 
      "images":[ 
     "title":"Verse kant-en-klaar maaltijden, salades", 

     "numberOfItems":382, 
     "numberOfSubFilters":17, 

     "images":[ 
      ] 
      ], 
     }, 
     { 
      "property":"productTaxonomyLevel2.id", 
      "showGrid":false, 
      { 
      "value":"1628", 
      "title":"Kruiden, uien, knoflook", 
      "frozen":false, 
       "width":198, 
      "links":[ 

       "height":198, 
       "url":"#" 
      "numberOfItems":39, 
      } 
     ], 
      "numberOfSubFilters":8, 
      ] 
     "showGrid":true, 
     "frozen":false, 
     "links":[ 

     }, {...} 
     ] 
     }, {...} 
      "images":[ 

       { 
        "width":200, 
        "height":200, 

        "url":"#" 
       } 
      ], 
      "showGrid":false, 
      "frozen":false, 
      "links":[ 

      ] 
     }, {...} 
相关问题