質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Ruby

    7916questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • JSON

    1196questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • Markdown

    83questions

    Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。

jsonを使ってmdファイルを作成したい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 670

suhr_sasuke

score 2

前提・実現したいこと

フォルダ内に複数あるjsonファイルのデータを読み取り、mustache(テンプレートエンジン)のテンプレートと合わせて、jsonファイルの内容をmdに書き出して保存するプログラムを作ろうとしています。
ただやりたいことはjsonの内容を使ってmdファイルを書き出したいだけなので、下に描いたやり方以外で実現できれば方法は構わないです。何か良い方法はないでしょうか・・・?

発生している問題

mustache用にdefでmdに渡すkeyとvalueを定義しているのですが、一度定義したものundefすることが出来ないため、後に作ったmdファイルにundef出来なかった値が書き込まれてしまいます・・・

エラーメッセージ

該当のソースコード

require 'mustache'
require 'json'
require 'fileutils'

class Features < Mustache
    mustache_name = Features
    #jsonファイルのパスを取得
    Dir::glob("./../jsons/#{mustache_name}_json/*.json").each {|json_file_path|
    #md用のフォルダがなければ作成
    dir_path = Dir::pwd + "/#{mustache_name}_md"
    FileUtils.mkdir_p(dir_path) unless FileTest.exist?(dir_path)

        #jsonファイルを開く
        json_data = open(json_file_path) do |io|
        #ハッシュを取り出す
        hash = JSON.load(io)

        #mustache用キーが日本語の場合の対策
        count = 1

            #ハッシュのキーと値を取得
            hash.each_with_index do | (key, value), i |
                #キーからidを取得してファイル名を作る
                if i == 0
                    @file_name = dir_path + "/#{value}.md"
                end
                #mustache用キーが日本語の場合の対策
                if key !~ /^[a-zA-Z]+$/
                    key = "key#{count}"
                    count += 1
                end
                @key = []
                @key << key
                #mustache用のメソッド定義
                eval <<-EOS
                    def #{key}
                        "#{value}"
                    end
                EOS
            end
        end
        puts @file_name
        #mdファイル作成
        File.open(@file_name, 'w') do |file|
            file.write(self.render)
        end
        #mustache用のメソッド定義
        i = @key.length
        eval <<-EOS
            until i == 0 do
                undef #{@key[i]}
                p #{@key[i]}
            end
        EOS
    }
end

試したこと

undefがなぜ出来ないのか理由がよく分からないです。
そもそもこのやり方がスマートではない気がしますので、やり方をご教示していただけたら幸いです。宜しくお願いします。

補足情報(言語/FW/ツール等のバージョンなど)

それぞれjsonの中身はこのようになっています。
json
{"id":xxx,"code":"yyy","flow":"zzz"}

mustacheファイルの例

id

{{id}}

code

{{code}}

flow

{{flow}}

この2つを使ってmdファイルを作成していくプログラムを作りたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

関連した質問

同じタグがついた質問を見る

  • Ruby

    7916questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • JSON

    1196questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • Markdown

    83questions

    Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。