Ruby on rails 我们可以用RubyonRails在同一级别挖掘多个值吗?

Ruby on rails 我们可以用RubyonRails在同一级别挖掘多个值吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我调用了一个API,其响应如下 { "data": { "name": "joe", "placeofbirth": "canada", "address": [], } } { "name": "Joe", "placeofbirth": "

我调用了一个API,其响应如下

{
   "data": {
       "name": "joe",
       "placeofbirth": "canada",
       "address": [],
   }
}
{
   "name": "Joe",
   "placeofbirth": "canada"
}
我想得到
name
placeofbirth
的值,并将其放入一个新对象中,因此它将如下所示

{
   "data": {
       "name": "joe",
       "placeofbirth": "canada",
       "address": [],
   }
}
{
   "name": "Joe",
   "placeofbirth": "canada"
}
我试图使用这个
response.dig(“data”,“name”,“placeofbirth”)
,但它返回了错误。如果我只选择了一个像这样的字段
response.dig(“数据”,“名称”)
response.dig(“数据”,“出生地点”)
,我将得到结果。是否无法使用
dig
选择多个值?如果不可能,还有其他解决方案可以实现我的预期结果吗?

按照它所说的做,它挖掘散列中的单个值,您发送给它的值,
data->name
就是该方法进入散列的路径

您可以将其与方法相结合

response.dig(“数据”).slice(“名称”、“出生地点”)
#=>{“姓名”:“乔”,“出生地”:“加拿大”}
按照它所说的做,它挖掘散列中的单个值,您发送给它的值,
data->name
可以说是该方法进入散列的路径

您可以将其与方法相结合

response.dig(“数据”).slice(“名称”、“出生地点”)
#=>{“姓名”:“乔”,“出生地”:“加拿大”}

“它返回错误”--这不是真的,是吗?它返回
nil
,不是错误。问题是,
dig
只查找单个值。您的代码,
response.dig(“data”、“name”、“placeofbirth”)
正在查找一个值,如:
{“data”=>{“name”=>{“birthplace”=>“?”}}
。但是由于不存在这样的嵌套值,它返回
nil
。此外,您可能实际查找的代码是:
response.require(:data)。permit(:name,:placeholder)
——因为如果找不到
数据
属性,它将返回
400错误请求
,并且这两个属性将用于任何更新操作。@TomLord:它确实返回一个错误,但是:)@SergioTulentsev从技术上讲,实际发布的内容不会返回错误:)只是因为
hash[“data”]#=>nil
。如果OP发布了实际的JSON字符串,例如
“{\”数据\“:{\”名称\“:\”乔\“,\”出生地点\“:\”加拿大\“,\”地址\“:[]}}”
,然后解释说这个JSON被解析了,或者如果使用了正确的键(对于
散列
发布),那么是的,它将
类型错误
例如
JSON.parse(posted\u Hash.to\u JSON)。dig(“数据”,“name”、“placeofbirth”)
posted\u hash.dig(:data,:name,:placeofbirth)
两者都将返回
类型错误(字符串没有#dig方法)
,它返回错误”“那不是真的,是吗?它返回
nil
,不是错误。问题是,
dig
只查找单个值。您的代码,
response.dig(“data”、“name”、“placeofbirth”)
正在查找一个值,如:
{“data”=>{“name”=>{“birthplace”=>“?”}}
。但是由于不存在这样的嵌套值,它返回
nil
。此外,您可能实际查找的代码是:
response.require(:data)。permit(:name,:placeholder)
——因为如果找不到
数据
属性,它将返回
400错误请求
,并且这两个属性将用于任何更新操作。@TomLord:它确实返回一个错误,但是:)@SergioTulentsev从技术上讲,实际发布的内容不会返回错误:)只是因为
hash[“data”]#=>nil
。如果OP发布了实际的JSON字符串,例如
“{\”数据\“:{\”名称\“:\”乔\“,\”出生地点\“:\”加拿大\“,\”地址\“:[]}}”
,然后解释说这个JSON被解析了,或者如果使用了正确的键(对于
散列
发布),那么是的,它将
类型错误
例如
JSON.parse(posted\u Hash.to\u JSON)。dig(“数据”,“name”、“placeofbirth”)
posted\u hash.dig(:data,:name,:placeofbirth)
两者都将返回
类型错误(字符串没有#dig方法)