如何阅读和使用ruby json字符串

时间:2014-09-11 11:08:58

标签: ruby cloudfoundry

我不是Ruby的专家,我尝试使用来自字符串的元素,该字符串是大型JSON消息的一部分。我无法出于任何原因使用JSON.parse,但能够找到一种循环对象的方法。但最后,我有这个剩余的字符串,我不知道如何获得价值:

{:time=>"2014-09-11 10:59:27 +0000", :cpu=>0.02421584874444766, :mem=>192069632, :disk=>635125760}

这附加到名为appUsage的变量。如果我尝试appUsage [" cpu"]我获得了:cpu。我已经尝试过互联网研究中的几个循环建议,但我不知道足够的Ruby - 我想 - 知道正确的一个可行。

P.S。:对于那些想知道这个"字符串"这是来自CFoundry图书馆app.stats的结果。

2 个答案:

答案 0 :(得分:2)

这是一个红宝石Hash(不是一个字符串),包含它看起来像Date,Float和Fixnum对象

你正在接近尝试appUsage [" cpu"]但你的哈希中的键是symbols而不是字符串,它的意思是:cpu not" cpu"是的,红宝石哈希把每个都视为一个不同的关键。

app_usage = {:time=>"2014-09-11 10:59:27 +0000", :cpu=>0.02421584874444766, :mem=>192069632, :disk=>635125760}

app_usage[:cpu]
# > 0.02421584874444766

app_usage[:disk]
# > 635125760

要将字符串转换为哈希以使用它,如上所述,请使用eval()。 在您的情况下,如果您有一个名为a的字符串,您可以通过调用eval(a)将您的字符串转换为哈希值,然后您可以使用您的哈希值:

a = "{:cpu=>0.02421584874444766, :mem=>192069632, :disk=>635125760}"
app_usage = eval(a)
app_usage[:cpu] # => 0.02421584874444766

但如this中所述:

  

它具有严重的安全隐患。它执行任何它是什么   通过,你必须110%肯定(因为,至少没有任何用户输入   一路上)它只包含正确形成的哈希或   来自外太空的意外错误/可怕的生物可能会开始   弹出。

答案 1 :(得分:0)

我从你那里得到的问题:

'{:time=>"2014-09-11 10:59:27 +0000", :cpu=>0.02421584874444766, :mem=>192069632, :disk=>635125760}'是一个字符串。

这意味着:

appUsage = '{:time=>"2014-09-11 10:59:27 +0000", :cpu=>0.02421584874444766, :mem=>192069632, :disk=>635125760}'

因此我们必须将此String对象转换为Hash对象。 并且有一种肮脏的方式来做到这一点。 :P

appUsage = eval '{:time=>"2014-09-11 10:59:27 +0000", :cpu=>0.02421584874444766, :mem=>192069632, :disk=>635125760}'

有关详细信息,请查看this thread