在尝试解析一个字符串之前检查它是否是有效的 json?

在 Ruby 中,在尝试解析字符串之前,有没有检查字符串是否有效的 json 的方法?

例如,从其他 URL 获取一些信息,有时它返回 json,有时它可能返回一个无效响应的垃圾。

我的代码:

def get_parsed_response(response)
parsed_response = JSON.parse(response)
end
51344 次浏览

你可以这样解析

begin
JSON.parse(string)
rescue JSON::ParserError => e
# do smth
end


# or for method get_parsed_response


def get_parsed_response(response)
parsed_response = JSON.parse(response)
rescue JSON::ParserError => e
# do smth
end

您可以创建一个方法来进行检查:

def valid_json?(json)
JSON.parse(json)
true
rescue JSON::ParserError, TypeError => e
false
end

我认为 parse_json应该返回 nil,如果它是无效的,不应该出错。

def parse_json string
JSON.parse(string) rescue nil
end


unless json = parse_json string
parse_a_different_way
end

让我建议一个更短的变体

def valid_json?(string)
!!(JSON.parse(string)) rescue false
end


> valid_json?("test")
=> false


> valid_json?("{\"mail_id\": \"999129237\", \"public_id\": \"166118134802\"}")
=> true