爲什麼不嗅探正常JSON打開/關閉用來定義對象字符[
... ]
和{
... }
?
這裏的物體看起來如何轉換爲JSON:
require 'json'
puts JSON[{'foo' => 1}]
puts JSON[[1, 2]]
# >> {"foo":1}
# >> [1,2]
檢查,以確保這些都是有效的字符串表示:
JSON['{"foo":1}'] # => {"foo"=>1}
JSON['[1,2]'] # => [1, 2]
以下是我會寫一些代碼來嗅探字符串是否通過看起來像一個有效的JSON字符串,或者只是一個帶雙引號的字符串:
require 'json'
def get_object(str)
if str[/^[{\[].+[}\]]$/]
JSON[str]
else
str[1..-2]
end
end
get_object('{"foo":1}') # => {"foo"=>1}
get_object('{"foo":1}').class # => Hash
get_object('[1,2]') # => [1, 2]
get_object('[1,2]').class # => Array
get_object("'bar'") # => "bar"
請注意,在最後一行,包含在單引號中的字符串'bar'
作爲裸字符串返回,即沒有包裝單引號集,因此字符串不再被引用。
您可能會收到一個空白字符串或跟隨有效載荷的字符串。如果是,請執行如下操作:
def get_object(str)
if str.strip[/^[{\[].+[}\]]$/]
JSON[str]
else
str.strip[1..-2]
end
end
get_object(' {"foo":1}') # => {"foo"=>1}
get_object(' [1,2] ') # => [1, 2]
get_object(" 'bar'") # => "bar"
'response.body [1 ..- 2]'? – Fabricator