概要
"[{'a': 1}]"
みたいな配列の中にjsonが入っている文字列をパースしたかっただけのお話。
きっかけ
日頃よくスクレイピングをしているんですけど、そのときに上記のような配列にデータが入っている事がありまして、パースするのに少し苦戦したので今後同じ悲しみを産まないために...
だめだったやり方
僕はRubyの標準ライブラリを信じています。
だから今回もきっとrequire 'json'
くんがすべてを解決できると信じていた、そうあの日までは。。。
ぼく「よし、配列の文字列でデータ引っ張って来れたしこれをJSON.parse
してっと...」
システム「unexpected token at ''a':1]' (JSON::ParserError)
」
ぼく「Why???」
僕の信じていたJSON.parse
は配列の中にjsonが入っているようなパターンは解析してくれませんでした。
まぁ、当たり前といえば当たり前なのかもですけど....
できたやり方
いろいろ文献を漁ってみて
「Ruby 配列文字列 パース」とかで調べてもRubyの配列をjoinして文字列にする話とか、その逆とか....そうじゃないんだよなぁって記事がいくつかあった中「yml
でパースすれば行けるよ」という記事を見かけた。
ぼく「yml??まさかぁ。とりあえず試してみるかぁ」
require 'yaml'
str = "[{'a': 1}]"
p YAML.load(str)[0]['a']
出力
1
ちゃんとパースされとる!!!すごい!!!
意外と当たり前にできそうだったけどコツが必要でしたという話