As TJ said, inArray uses === (indexOf actually, but that's the same thing), therefore even identical literals are compared non equal. Here's a workaround:
var index = jQuery.inArray(
JSON.stringify({"id" : "2", "description" : "two"}),
$.map(arr, JSON.stringify) )