2013-06-04 25 views
1

我试图解析以下字符串名为结果:JSON解析器行为以不同的方式

{ 
"status":0, 
"id":"faxxxxx-1", 
"hypotheses":[ 
    {"utterance":"skateboard","confidence":0.90466744}, 
    {"utterance":"skate board"}, 
    {"utterance":"skateboarding"}, 
    {"utterance":"skateboards"}, 
    {"utterance":"skate bored"} 
] 
} 

用Ruby 1.8使用obj = JSON.parse(result)与JSON宝石。

有问题的命令是:

puts "#{obj['hypotheses'][0]}" 

我的旧工作站(其硬盘去世)给我:

{"utterance" => "skateboard", "confidence" => 0.90466744} 

我目前的工作站给我:

confidence0.90466744utteranceskateboard 

老工作站不是由我设置的,所以我不知道当前安装了什么样的软件包一个是。

为什么在完全相同的脚本的输出中有差异? 我怎样才能使目前的一个看起来像旧的?

我完全陌生这个顺便说一句。

+0

您显示的对象看起来是JSON结构,但与Ruby字符串不同。你忘了显示包含它的分隔单引号,并将它作为Ruby字符串吗? –

回答

3

在Ruby 1.8中,Hash#to_s只是简单地将所有元素连接在一起而没有空格,相当于to_a.flatten.join('')

在Ruby 1.9中,Hash#to_sinspect的别名,并生成格式良好的输出。

要获得在这两种情况下完成同样的事情:

puts obj['hypotheses'][0].inspect 

同样的道理也适用于阵列。

+0

优秀!这正是我正在寻找的。谢谢! –

+0

是否有一种简单的ruby-ish方法来反转输出? 从这个方法,我得到: {“信心” => 0.90466744,“话语” =>“滑板”} 当我想它周围的其他方法。即首先发言。 –

+0

如果你的意思是重新排列哈希,是的,你总是可以在显示之前对它进行排序。如果你只是想对它进行排序:'hash.sort'将其转换为一个键/值对的数组。要转换回散列:'散列[hash.sort]'应该这样做。 – tadman