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