Jekyll - generating JSON files alongside the HTML files

前端 未结 3 629
天涯浪人
天涯浪人 2020-12-14 12:00

I\'d like to make Jekyll create an HTML file and a JSON file for each page and post. This is to offer a JSON API of my Jekyll blog - e.g. a post can be accessed either at

3条回答
  •  春和景丽
    2020-12-14 12:38

    I was looking for something like this too, so I learned a bit of ruby and made a script that generates JSON representations of Jekyll blog posts. I’m still working on it, but most of it is there.

    I put this together with Gruntjs, Sass, Backbonejs, Requirejs and Coffeescript. If you like, you can take a look at my jekyll-backbone project on Github.

    # encoding: utf-8
    #
    # Title:
    # ======
    # Jekyll to JSON Generator
    #
    # Description:
    # ============
    # A plugin for generating JSON representations of your
    # site content for easy use with JS MVC frameworks like Backbone.
    #
    # Author:
    # ======
    # Jezen Thomas
    # jezenthomas@gmail.com
    # http://jezenthomas.com
    
    module Jekyll
      require 'json'
    
      class JSONGenerator < Generator
        safe true
        priority :low
    
        def generate(site)
          # Converter for .md > .html
          converter = site.getConverterImpl(Jekyll::Converters::Markdown)
    
          # Iterate over all posts
          site.posts.each do |post|
    
            # Encode the HTML to JSON
            hash = { "content" => converter.convert(post.content)}
            title = post.title.downcase.tr(' ', '-').delete("’!")
    
            # Start building the path
            path = "_site/dist/"
    
            # Add categories to path if they exist
            if (post.data['categories'].class == String)
              path << post.data['categories'].tr(' ', '/')
            elsif (post.data['categories'].class == Array)
              path <<  post.data['categories'].join('/')
            end
    
            # Add the sanitized post title to complete the path
            path << "/#{title}"
    
            # Create the directories from the path
            FileUtils.mkpath(path) unless File.exists?(path)
    
            # Create the JSON file and inject the data
            f = File.new("#{path}/raw.json", "w+")
            f.puts JSON.generate(hash)
          end
    
        end
    
      end
    
    end
    

提交回复
热议问题