Description
When rtk curl filters JSON API responses, the output has unquoted object keys, producing invalid JSON that breaks downstream parsers (python3 -c 'json.load(...)', jq, etc.).
Reproduction
# With rtk:
rtk curl -s https://any-api.example/endpoint | python3 -c 'import sys,json; json.load(sys.stdin)'
# => JSONDecodeError: Expecting property name enclosed in double quotes
# Without rtk (works fine):
rtk proxy curl -s https://any-api.example/endpoint | python3 -c 'import sys,json; json.load(sys.stdin)'
# => OK
Expected vs Actual
Expected (valid JSON):
{"id": 123, "status": "open"}
Actual (invalid — keys unquoted):
{id: 123, status: "open"}
Root Cause
In src/cmds/system/json_cmd.rs, the extract_schema() function formats object keys without wrapping them in double quotes:
// Lines 251-258
lines.push(format!("{} {}: {},", indent, key, val_trimmed)); // missing quotes around key
lines.push(format!("{} {}: {}", indent, key, val_trimmed)); // missing quotes around key
lines.push(format!("{} {}:", indent, key)); // missing quotes around key
This is called from curl_cmd.rs line 61 via filter_json_string() → extract_schema().
Impact
- Any pipeline that does
rtk curl ... | python3 -c 'json.load(...)' or | jq . breaks
- Workaround:
rtk proxy curl bypasses filtering but defeats the purpose of rtk
- Affects all JSON API calls through curl (Gitea, GitHub, REST APIs, etc.)
Environment
- rtk v0.34.3 (stable) and dev-0.35.0-rc.108 — both affected
- macOS ARM64
Fix
Wrap key in double quotes at lines 253, 255, and 258 of json_cmd.rs.
Description
When
rtk curlfilters JSON API responses, the output has unquoted object keys, producing invalid JSON that breaks downstream parsers (python3 -c 'json.load(...)',jq, etc.).Reproduction
Expected vs Actual
Expected (valid JSON):
{"id": 123, "status": "open"}Actual (invalid — keys unquoted):
Root Cause
In
src/cmds/system/json_cmd.rs, theextract_schema()function formats object keys without wrapping them in double quotes:This is called from
curl_cmd.rsline 61 viafilter_json_string()→extract_schema().Impact
rtk curl ... | python3 -c 'json.load(...)'or| jq .breaksrtk proxy curlbypasses filtering but defeats the purpose of rtkEnvironment
Fix
Wrap
keyin double quotes at lines 253, 255, and 258 ofjson_cmd.rs.