Skip to content

Instantly share code, notes, and snippets.

@fuyuton
Last active December 12, 2022 13:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fuyuton/7e4f7877112d51aed0e5d4cf7b028751 to your computer and use it in GitHub Desktop.
Save fuyuton/7e4f7877112d51aed0e5d4cf7b028751 to your computer and use it in GitHub Desktop.
JSONの構造解析
#参考:[Ruby Bool値かどうか型チェックしたい。ついでにis_bool?メソッドを作ってみた。 - かもメモ](https://chaika.hatenablog.com/entry/2016/10/19/153728)
def analysis_hash(hash)
#puts "h: #{hash.class.to_s}"
case hash.class.to_s
when "String"
puts " String"
return
when "Integer"
puts " Integer"
return
when "Float"
puts " Float"
return
when "TrueClass", "FalseClass"
puts " Boolean"
return
when "NilClass"
puts " Nil"
return
end
puts "{"
begin
hash.each do |sub|
k = sub[0]
v = sub[1]
#puts "k: #{k.class.to_s}"
#puts "v: #{v.class.to_s}"
case v.class.to_s
when "Hash"
puts "#{k}: Hash"
parse_hash(v)
when "Array"
puts "#{k}: Array"
puts "["
parse_hash(v[0])
puts "]"
else
case k.class.to_s
when "String"
puts "#{k}: String"
when "Integer"
puts "#{k}: Integer"
when "Float"
puts "#{k}: Float"
when "TrueClass", "FalseClass"
puts "#{k}: Boolean"
when "NilClass"
puts "#{k}: Nil"
end
end
end
rescue => e
puts e
puts k
puts v
end
end
puts "}"
# 使い方
# hash = JSON.parse(json)
# analysis_hash(hash)
@fuyuton
Copy link
Author

fuyuton commented Dec 12, 2022

配列の中にハッシュが存在する場合、when "Hash"の中で{}を入れるとうまく行かないので、外側に書いてある

@fuyuton
Copy link
Author

fuyuton commented Dec 12, 2022

Booleanの比較を同じスタイルにまとめた

@fuyuton
Copy link
Author

fuyuton commented Dec 12, 2022

Nilがあると止まってしまうので、Nilに対応した

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment