Logs contained many JWS strings; each payload had fields like id, username, email, timestamp. Reading them by eye was slow.
If you have a file tokens.txt with one JWS per line:
while read token; do
echo "$token" | cut -d. -f2 | base64 -d 2>/dev/null | jq -c '.'
done < tokens.txt | jq -r '.[] | [.sub, .exp, .iss] | @csv'
Why it’s top – No dependencies beyond jq and coreutils. Blazing fast.
For power users, manually clicking "convert" is slow. The best long-term strategy is scripting.
One-liner using jq (Linux/Mac):
# Decode JWS (cut middle part, decode base64, convert to CSV)
cat myfile.jws | cut -d "." -f2 | base64 --decode | jq -r '.data[] | [.id, .name] | @csv' > output.csv
Using Python (PyJWT + pandas):
import jwt, pandas as pd
# Decode (without verification for speed)
payload = jwt.decode(jws_string, options="verify_signature": False)
df = pd.json_normalize(payload['data'])
df.to_csv('output.csv', index=False)
Best for quick testing or small batches (≤10 tokens).
| Tool | Features | Limitations | |------|----------|--------------| | JWT.io | Debugger, copy-paste payload | No CSV export, manual | | Konklone’s JWT Decoder | Decode only | No batch | | TableConvert.com | JSON to CSV | You must decode JWS first | | ConvertCSV.com | JSON to CSV | Same as above |
Workaround for online:
Warning: Never paste production tokens with secrets into unknown websites.
If you have tried to convert the file and failed, it is usually due to one of two reasons:
1. The "Missing Data" Issue A JWS file contains the instructions (e.g., "Download data from Database X, filter by Date Y").
2. The File Extension Confusion Are you sure the file is a KNIME Workflow?
| Required Feature | Python Script | jq + jose | Online Tools | |-----------------|---------------|------------|---------------| | Auto-detect compact vs. flattened JWS | Yes | No | Partial | | Recursive flattening of nested payloads | Yes | Manual | No | | Handle multiple signatures (JWS JSON Serialization) | Yes | No | No | | Preserve binary/numeric types | Yes | Lossy | Lossy | | Streaming for large files | Yes | Yes | No |
Takeaway: 90% of "JWT to CSV" online tools cannot process a raw JWS because they expect unencoded JWT payloads only.
| Pitfall | Solution |
|---------|----------|
| Unencoded payload (detached content) | Cannot convert to CSV — no payload to extract. |
| Binary signature fields in CSV | Store as base64 string, not raw bytes. |
| CSV injection (payload starts with =,-,@,+) | Prefix with ' (apostrophe) or quote all fields. |
| Line breaks inside payload string | Ensure CSV writer escapes newlines. |