Last active
December 12, 2022 13:23
-
-
Save fuyuton/7e4f7877112d51aed0e5d4cf7b028751 to your computer and use it in GitHub Desktop.
JSONの構造解析
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#参考:[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) |
Booleanの比較を同じスタイルにまとめた
Nilがあると止まってしまうので、Nilに対応した
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
配列の中にハッシュが存在する場合、when "Hash"の中で{}を入れるとうまく行かないので、外側に書いてある