{"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 Ok JSObject JSValue
처럼? - where 절에서 값을 추출 할 수없는 이유는 무엇입니까?
- 이유는
Result (JSObject (JSValue))
이고Result JSObject JSValue
이 아닌 이유는 무엇입니까? - 왜
format
이 범위를 벗어 났습니까?
나는 IO와 결과 모나드를 함께 모으는 느낌이 들었다. do
블록이나 뭐. Result
도 모나드입니까? IO
do
전체를 골라 가지 않고 원하는 값을 추출 할 수 있습니까? do
?
JSON을 해독하려는 경우가 아니라면 [aeson'] (https://hackage.haskell.org/package/aeson-0.11.2.0/)에 대한 인기있는 Haskell 라이브러리가 있다는 것을 알고있을 것입니다. docs/Data-Aeson.html)? – Alec