function autoType(nullString) {
return function (object) {
for (var key in object) {
var value = object[key].trim(),
number,
m;
if (!value || (nullString && value === nullString)) value = null;
else if (value === "true") value = true;
else if (value === "false") value = false;
else if (value === "NaN") value = NaN;
else if (!isNaN((number = +value))) value = number;
else if (
(m = value.match(
/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/
))
) {
if (fixtz && !!m[4] && !m[7])
value = value.replace(/-/g, "/").replace(/T/, " ");
value = new Date(value);
} else continue;
object[key] = value;
}
return object;
};
}