Thanks everyone for their advice and options and I've been tying them all day, but to no avail. Here is what I tried and the results:
JsonObject& timestamp = root["timestamp"];
const char* timestamp_lifts = timestamp["lifts"];
long timestamp_lifts_ll = atoll(timestamp_lifts);
unsigned long timestamp_lifts_atoll = atoll(timestamp_lifts);
long timestamp_lifts_atol = atol(timestamp_lifts);
unsigned long timestamp_lifts_atoi = atoi(timestamp_lifts);
unsigned long timestamp_lifts_strtoul = strtoul(timestamp_lifts, NULL, 20);
Serial.println(timestamp_lifts);
Serial.println(timestamp_lifts_atoll);
Serial.println(timestamp_lifts_atol);
Serial.println(timestamp_lifts_atoi);
Serial.println(timestamp_lifts_strtoul);
Serial Results:
1522116884359
1698461575
2147483647
2147483647
4294967295
The correct string is the top one (1522116884359). I'll try to clip the far right digits, which are the unix time down to milliseconds and see what happens. Thanks again for everyone's suggestions!