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

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

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

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

Q&A

解決済

2回答

3268閲覧

読み込み→並び替え→出力するには?

terate

総合スコア103

Ruby

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

0グッド

2クリップ

投稿2016/02/15 12:02

human.jsonファイルを読み込み、体重(taiju)の軽い順(昇順)に並びかえてjsonファイルで出力したいのですが、ここからどうしたら良いでしょうか?

ruby

1require 'json' 2 3File.open("human.json") do |list| 4 list.read.split('\n').each do |i| 5 end6end

#human.json
[{"namae":"taro","sincho":"177","taiju":"67"},↲
{"namae":"shinsuke","sincho":"180","taiju":"90"},↲
{"namae":"sadao","sincho":"165","taiju":"58"}]

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんな感じでしょうか。

ruby

1require 'json' 2 3puts JSON.parse(File.read("human.json")).sort_by{|v| v["taiju"]}.to_json

ファイルに出力するならこうでしょうか。

ruby

1require 'json' 2 3data = JSON.parse(File.read("human.json")).sort_by{|v| v["taiju"]}.to_json 4File.write("human-sorted.json", data)

もしよろしければ読み込みの部分とソートの部分をあえてわざわざ分けておこなう場合についても可能であれば教えていただけませんでしょうか?

ruby

1require 'json' 2 3data = File.read("human.json") 4data = JSON.parse(data).sort_by{|v| v["taiju"]}.to_json 5File.write("human-sorted.json", data)

投稿2016/02/15 12:16

編集2016/02/15 12:24
ngyuki

総合スコア4514

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

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

terate

2016/02/15 12:21

ありがとうございます!もしよろしければ読み込みの部分とソートの部分をあえてわざわざ分けておこなう場合についても可能であれば教えていただけませんでしょうか?
terate

2016/02/15 23:06

ありがとうございます!迅速にご対応いただけて大変助かります!
guest

0

ruby

1require 'json' 2 3json_data = open('human.json') do |f| 4 JSON.load(f) 5end 6 7json_data.sort! { |a, b| a['taiju'].to_i <=> b['taiju'].to_i } 8 9open('out.json', 'w') do |f| 10 JSON.dump(json_data, f) 11end

実行結果

$ ls *.json human.json katoy-MacBook-Pro:tmp katoy$ cat human.json [{"namae":"taro","sincho":"177","taiju":"67"}, {"namae":"shinsuke","sincho":"180","taiju":"90"}, {"namae":"sadao","sincho":"165","taiju":"58"}] $ ruby j.rb $ ls *.json human.json out.json "165","taiju":"58"},{"namae":"taro","sincho":"177","taiju":"67"},{"namae":"shinsuke","sincho":"180","taiju":"90"}]

投稿2016/02/15 12:27

katoy

総合スコア22324

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

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

terate

2016/02/15 23:05

いつもありがとうございます!大変勉強になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問