Ruby 将json输出到字符串
我一直在自学ruby,但现在我遇到了一个问题,我不断遇到一个错误:Ruby 将json输出到字符串,ruby,json,string,Ruby,Json,String,我一直在自学ruby,但现在我遇到了一个问题,我不断遇到一个错误: mesureitcurrentv.rb:9:in `[]': can't convert String into Integer (TypeError) from mesureitcurrentv.rb:9:in `<main>' 为了清楚起见,我建议使用而不是 键watt不是sensor的子键。它是父数组元素的子键。外部[]表示一个数组,并且至少有一个数字键 因此,您可以通过以下方式直接检索watt: # wat
mesureitcurrentv.rb:9:in `[]': can't convert String into Integer (TypeError)
from mesureitcurrentv.rb:9:in `<main>'
为了清楚起见,我建议使用而不是 键
watt
不是sensor
的子键。它是父数组元素的子键。外部[]
表示一个数组,并且至少有一个数字键
因此,您可以通过以下方式直接检索watt
:
# watt is a key of the array element [0]
pjson[0]['watt']
=> "703"
但更可靠的是,如果您希望返回多个数组元素,您可以通过以下方式检索与其sensor\u id
s配对的所有元素:
pjson.map { |s| [s['sensor']['sensor_id'], s['watt']] }
它将返回一个数组,如
[["0", "703"]]
或使用传感器标题
:
pjson.map { |s| [s['sensor']['sensor_title'], s['watt']] }
=> [["sensor 0", "703"]]
为了清楚起见,我建议使用而不是 键
watt
不是sensor
的子键。它是父数组元素的子键。外部[]
表示一个数组,并且至少有一个数字键
因此,您可以通过以下方式直接检索watt
:
# watt is a key of the array element [0]
pjson[0]['watt']
=> "703"
但更可靠的是,如果您希望返回多个数组元素,您可以通过以下方式检索与其sensor\u id
s配对的所有元素:
pjson.map { |s| [s['sensor']['sensor_id'], s['watt']] }
它将返回一个数组,如
[["0", "703"]]
或使用传感器标题
:
pjson.map { |s| [s['sensor']['sensor_title'], s['watt']] }
=> [["sensor 0", "703"]]
前面的回答说明您的打字错误来自该行
pjson = JSON[response.body]
事实并非如此;它来自
p pjson["sensor"]["watt"].
JSON[x]
和JSON.parse(x)
可以互换
抛出TypeError是因为pjson是一个数组,而不是散列,并且只接受整数位置(例如,pjson[0]
)pjson
是一个数组,因为虽然原始json文本只有一个顶级哈希对象,但它嵌套在一个数组中(初始“[”)
此外,正如Michael的回答所指出的,“watt”
不是“sensor”
的子键——它是顶级散列中的一个键。因此,您需要的是pjson[0]
获取散列对象,然后pjson[0][“watt”
获取“watt”
的值(在本例中为“703”)
前面的回答说明您的打字错误来自该行
pjson = JSON[response.body]
事实并非如此,而是来自于
p pjson["sensor"]["watt"].
JSON[x]
和JSON.parse(x)
可以互换
抛出TypeError是因为pjson是一个数组,而不是散列,并且只接受整数位置(例如,pjson[0]
)。pjson
是一个数组,因为原始json文本只有一个顶级散列对象,它嵌套在数组中(初始“[”)
此外,正如Michael的回答所指出的,“watt”
不是“sensor”
的子键——它是顶级散列中的一个键。因此,您需要的是pjson[0]
获取散列对象,然后pjson[0][“watt”
获取“watt”
的值(在本例中为“703”)
也许
pjson[0][“sensor”][“watt”][/code>也许pjson[0][“sensor”][“watt”][/code>从来都不知道JSON][/code>是作为一种方法存在的,但很抱歉在学校的一天里测试了这一点,因为我不得不抽空去做一个答案,而这个答案从来都不知道JSON][]
作为一种方法存在,但遗憾的是,在学校的一天里测试了这种方法,因为我不得不抽出时间来批改答案