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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

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

JSON

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

Markdown

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

Q&A

0回答

1736閲覧

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

suhr_sasuke

総合スコア8

Ruby

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

JSON

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

Markdown

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

0グッド

0クリップ

投稿2016/05/09 16:08

編集2022/01/12 10:55

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

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

エラーメッセージ

###該当のソースコード

Ruby

1require 'mustache' 2require 'json' 3require 'fileutils' 4 5class Features < Mustache 6 mustache_name = Features 7 #jsonファイルのパスを取得 8 Dir::glob("./../jsons/#{mustache_name}_json/*.json").each {|json_file_path| 9 #md用のフォルダがなければ作成 10 dir_path = Dir::pwd + "/#{mustache_name}_md" 11 FileUtils.mkdir_p(dir_path) unless FileTest.exist?(dir_path) 12 13 #jsonファイルを開く 14 json_data = open(json_file_path) do |io| 15 #ハッシュを取り出す 16 hash = JSON.load(io) 17 18 #mustache用キーが日本語の場合の対策 19 count = 1 20 21 #ハッシュのキーと値を取得 22 hash.each_with_index do | (key, value), i | 23 #キーからidを取得してファイル名を作る 24 if i == 0 25 @file_name = dir_path + "/#{value}.md" 26 end 27 #mustache用キーが日本語の場合の対策 28 if key !~ /^[a-zA-Z]+$/ 29 key = "key#{count}" 30 count += 1 31 end 32 @key = [] 33 @key << key 34 #mustache用のメソッド定義 35 eval <<-EOS 36 def #{key} 37 "#{value}" 38 end 39 EOS 40 end 41 end 42 puts @file_name 43 #mdファイル作成 44 File.open(@file_name, 'w') do |file| 45 file.write(self.render) 46 end 47 #mustache用のメソッド定義 48 i = @key.length 49 eval <<-EOS 50 until i == 0 do 51 undef #{@key[i]} 52 p #{@key[i]} 53 end 54 EOS 55 } 56end

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

###補足情報(言語/FW/ツール等のバージョンなど)
それぞれjsonの中身はこのようになっています。
json
{"id":xxx,"code":"yyy","flow":"zzz"}

mustacheファイルの例
##id
{{id}}

##code
{{code}}

##flow
{{flow}}

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問