Sometimes you’ll need to translate Google credential JSON files into environment variables. This can be a bit of a problem because there’s multiple values to escape but there’s a few ways to get it done. I’ve got a few here I’ve used that can be taken on their own or combined in several circumstances.

Base64

The simplest of course is base64 encoding. On Linux and MacOS it’s done like this:

$ base64 ~/.gcloud/user@google-project.json
AAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCC

Problem is that’ll give you carraige returns. What you REALLY want is to disable wrapping:

$ base64 -w 0 ~/.gcloud/user@google-project.json
AAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCC

Much better.

Carriage Returns

Suppose you’ve got your file:

$ cat ~/.gcloud/user@google-project.json
{
  "type": "service_account",
  "project_id": "google-project",
  "private_key_id": "AAAAAAAAAAAAAAAAAAAAAAA",
  "private_key": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
  "client_email": "user@google-project.iam.gserviceaccount.com",
  "client_id": "CCCCCCCCCCCCCC",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/user%40google-project.iam.gserviceaccount.com"
}

Great, but small problem. It’s got a whole lot of carriage returns. How can you get rid of them quickly and effectively?

$ cat ~/.gcloud/user@google-project.json | tr -d '\r\n'
{  "type": "service_account",  "project_id": "google-project",  "private_key_id": "AAAAAAAAAAAAAAAAAAAAAAA",  "private_key": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",  "client_email": "user@google-project.iam.gserviceaccount.com",  "client_id": "CCCCCCCCCCCCCC",  "auth_uri": "https://accounts.google.com/o/oauth2/auth",  "token_uri": "https://oauth2.googleapis.com/token",  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/user%40google-project.iam.gserviceaccount.com"}

Double Quotes

Better, but some shells will choke on the double quotes. So we can go one step further.

$ cat ~/.gcloud/user@google-project.json | tr -d '\r\n' | sed 's/\"/\\"/g'
{  \"type\": \"service_account\",  \"project_id\": \"google-project\",  \"private_key_id\": \"AAAAAAAAAAAAAAAAAAAAAAA\",  \"private_key\": \"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\",  \"client_email\": \"user@google-project.iam.gserviceaccount.com\",  \"client_id\": \"CCCCCCCCCCCCCC\",  \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",  \"token_uri\": \"https://oauth2.googleapis.com/token\",  \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",  \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/user%40google-project.iam.gserviceaccount.com\"}