ruby 使用一些JSON内容解析popen3输出

tktrz96b  于 2023-05-06  发布在  Ruby
关注(0)|答案(1)|浏览(125)

我是Ruby的新手,我正在以如下方式运行Open3.popen3()命令:

_, stdout, stderr, wait_thr = Open3.popen3("<command>")
raise "<command> failed: #{stderr.read}" if wait_thr.value != 0

预期的stdoutstdout.read)遵循下一个结构(注意数组的元素数量可以变化):

Some log line of plain text:
[{'foo': 'bar', 'fooz': '1'}, {'spam': 'ham', 'eggs': '5'}]

当我读取stdout时,它返回一个String,这当然是预期的类,但我想稍微处理一下,以便能够将其转换/解析为JSON。我尝试的是:

list = stdout.read.sub! 'Some log line of plain text:', ''
JSON.parse(list)

但它不起作用:

/Library/Ruby/Gems/2.6.0/gems/json-2.6.1/lib/json/common.rb:216:in `parse': 451: unexpected token at '{'foo': 'bar', 'fooz': '1'}, {'spam': 'ham', 'eggs': '5'}]' (JSON::ParserError)

有没有一种方法可以做到这一点,是不是太hacky?TIA!

ovfsdjhp

ovfsdjhp1#

好吧,我找到了一个方法:

list = stdout.read.sub! 'Some log line of plain text:', ''
JSON.parse(list.gsub('\'', '"'))

不知道这是不是最好的方法,但对我来说已经足够好了!

相关问题