{"format": {"format_name": value}}
のJSONでvalue
を抽出するffprobe
のラッパーを記述しようとしています。 JSONは、作成されたプロセスによって出力されます。ここに私が何を得たのです。Text.JSONを使用したデータの抽出
import System.Process
import System.Environment
import System.IO
import Text.JSON
main = do
args <- getArgs
(_, Just out, _, p) <- createProcess
(proc "ffprobe" [args!!0, "-of", "json", "-show_format"])
{ std_out = CreatePipe }
s <- hGetContents out
--putStrLn $ show (decode s :: Result JSValue)
--waitForProcess p
--putStrLn $ valFromObj "format_name" format
-- where format = valFromObj "format" rootObj
-- (Ok rootObj) = decode s :: Result (JSObject (JSValue))
let (Ok rootObj) = decode s :: Result (JSObject (JSValue))
let (Ok format) = valFromObj "format" rootObj :: Result (JSObject (JSValue))
putStrLn format_name
where (Ok format_name) = valFromObj "format_name" format
それはとコンパイルに失敗し
:私はコンパイルする最後の行を取得することができない理由を含むいくつかのこと、について困惑している
[1 of 1] Compiling Main (ffprobe.hs, ffprobe.o)
ffprobe.hs:20:59: error:
Variable not in scope: format :: JSObject JSValue
:
- なぜすることができます」私は
Ok
のResult
に::
の後に主張します。:: Result Ok JSObject JSValue
のように? - where句で値を抽出できないのはなぜですか?
- なぜ
Result (JSObject (JSValue))
で、Result JSObject JSValue
ではないのですか? - なぜ
format
が範囲外ですか?
私はIOと結果のモナドを同じブロックdo
に混ぜていると感じています。 Result
もモナドですか? IO
do
の全部を渡さなくても、私が別にしたい値を抽出できますか?do
JSONをデコードしたい場合は、[aeson']という名前のHaskellライブラリがあることが分かります(https://hackage.haskell.org/package/aeson-0.11.2.0/)。 docs/Data-Aeson.html)? – Alec