Skip to content

bug(json): curl filter outputs invalid JSON — object keys lose double quotes #1015

@pszymkowiak

Description

@pszymkowiak

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingeffort-smallQuelques heures, 1 fichierfilter-qualityFilter produces incorrect/truncated signalgood first issueGood for newcomers

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions