{
  "title": "JSONL filter",
  "human_url": "https://happytails.ai/en/data-tools/jsonl-filter/",
  "agent_url": "https://happytails.ai/agents/en/data-tools/jsonl-filter/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/data-tools/jsonl-filter.md",
  "content": "JSONL filter\nFilter JSON Lines with explicit field conditions. Export matching records and a report of their original line numbers.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use JSONL filter\nPaste JSONL and enter the filter conditions.\nChoose All or Any and decide whether invalid lines should block export.\nReview the matching and invalid counts, then download the JSONL and source-line report.\nUseful next steps\nJSONL validator\nJSON array grouper\nJSON path inventory\nWrite conditions without executing code\nEnter conditions as a JSON array of objects containing path, operator and value. Paths use JSON Pointer syntax. Supported operators include equality, text contains, prefix and suffix, numeric comparisons, existence, missing and type. Omit value for exists and missing; use All or Any to combine up to 20 conditions.\nCompare values without hidden conversion\nText matching is case-sensitive. Numeric comparisons accept JSON numbers and do not convert numeric strings. Equality compares values by type and structure. Missing paths match only the missing operator, including when using not-equals. No expressions or regular expressions are evaluated.\nChoose explicitly how invalid lines are handled\nInvalid input blocks export by default. Choose Skip invalid lines to export matches from accepted lines, with every invalid line counted in the report. The report lists the original one-based source lines for exported records. A valid filter with no matches produces an empty JSONL file.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "JSONL validator",
      "url": "https://happytails.ai/en/data-tools/jsonl-validator/"
    },
    {
      "name": "JSON array grouper",
      "url": "https://happytails.ai/en/data-tools/json-array-grouper/"
    },
    {
      "name": "JSON path inventory",
      "url": "https://happytails.ai/en/data-tools/json-path-inventory/"
    }
  ],
  "tool": {
    "id": "jsonl-filter",
    "category": "data-tools",
    "built": true,
    "requirements": "At most 20 conditions, 10,000 lines and 100,000 characters per line. Up to 1,000,000 input characters, 50,000 values per JSON document and 64 nesting levels. Duplicate keys, negative zero and numbers that cannot safely retain their decimal value are rejected. Quote precision-sensitive numbers as strings. Formatting and object member order may change. Processing stays on your device. Each JSON Pointer is limited to 20,000 characters.",
    "implementation": {
      "fields": [
        {
          "key": "rules",
          "label": "Filter conditions",
          "value": "[{\"path\":\"/score\",\"operator\":\"number-gte\",\"value\":80}]",
          "type": "textarea",
          "help": "A JSON array of conditions. Operators: equals, not-equals, contains, starts-with, ends-with, number-gt, number-gte, number-lt, number-lte, exists, missing, type. Use path/operator/value; omit value for exists or missing. Up to 20 conditions."
        },
        {
          "key": "match",
          "label": "Keep records matching",
          "value": "All",
          "type": "select",
          "values": [
            "All",
            "Any"
          ]
        },
        {
          "key": "invalid",
          "label": "Invalid JSONL records",
          "value": "Stop on invalid lines",
          "type": "select",
          "values": [
            "Stop on invalid lines",
            "Skip invalid lines"
          ]
        }
      ],
      "live": true,
      "presentation": "metrics",
      "note": "Filter one JSON value per line with explicit conditions, without evaluating expressions. String comparisons are case-sensitive and numbers are not coerced from strings. Missing matches only the missing operator. Invalid lines block export unless you explicitly choose to skip them; the report always identifies excluded lines. Runs on your device. Up to 1,000,000 input characters, 50,000 values per JSON document and 64 nesting levels. Duplicate JSON keys, unsafe integers, negative zero and decimals that would change on JSON serialization are rejected rather than rounded. Quote precision-sensitive numbers as strings. Output whitespace and object-member order may change. Each JSON Pointer is limited to 20,000 characters.",
      "experience": {
        "automatic": true,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "JSONL records",
        "placeholder": "{\"name\":\"Ana\",\"score\":90}\n{\"name\":\"Bea\",\"score\":70}\n{\"name\":\"Cam\",\"score\":\"95\"}\n",
        "help": "Paste text to process locally. Review the result before downloading. Results update as you type. Up to 1,000,000 characters.",
        "action": null
      },
      "mode": "automatic",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# JSONL filter\n\n- Human page: https://happytails.ai/en/data-tools/jsonl-filter/\n- Markdown: https://happytails.ai/en/data-tools/jsonl-filter.md\n- Structured JSON: https://happytails.ai/agents/en/data-tools/jsonl-filter/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `jsonl-filter` |\n| Category | data-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Automatic updates after valid input or file selection. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nFilter one JSON value per line with explicit conditions, without evaluating expressions. String comparisons are case-sensitive and numbers are not coerced from strings. Missing matches only the missing operator. Invalid lines block export unless you explicitly choose to skip them; the report always identifies excluded lines. Runs on your device. Up to 1,000,000 input characters, 50,000 values per JSON document and 64 nesting levels. Duplicate JSON keys, unsafe integers, negative zero and decimals that would change on JSON serialization are rejected rather than rounded. Quote precision-sensitive numbers as strings. Output whitespace and object-member order may change. Each JSON Pointer is limited to 20,000 characters.\n\n### Inputs and settings\n\nText input: JSONL records.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\n{\"name\":\"Ana\",\"score\":90}\n{\"name\":\"Bea\",\"score\":70}\n{\"name\":\"Cam\",\"score\":\"95\"}\n```\n\nPaste text to process locally. Review the result before downloading. Results update as you type. Up to 1,000,000 characters.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `rules` | Filter conditions | textarea | \"[{\\\"path\\\":\\\"/score\\\",\\\"operator\\\":\\\"number-gte\\\",\\\"value\\\":80}]\" |  |\n| `match` | Keep records matching | select | \"All\" | Allowed: All, Any |\n| `invalid` | Invalid JSONL records | select | \"Stop on invalid lines\" | Allowed: Stop on invalid lines, Skip invalid lines |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nAt most 20 conditions, 10,000 lines and 100,000 characters per line. Up to 1,000,000 input characters, 50,000 values per JSON document and 64 nesting levels. Duplicate keys, negative zero and numbers that cannot safely retain their decimal value are rejected. Quote precision-sensitive numbers as strings. Formatting and object member order may change. Processing stays on your device. Each JSON Pointer is limited to 20,000 characters.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"jsonl-filter\",\n  \"category\": \"data-tools\",\n  \"built\": true,\n  \"requirements\": \"At most 20 conditions, 10,000 lines and 100,000 characters per line. Up to 1,000,000 input characters, 50,000 values per JSON document and 64 nesting levels. Duplicate keys, negative zero and numbers that cannot safely retain their decimal value are rejected. Quote precision-sensitive numbers as strings. Formatting and object member order may change. Processing stays on your device. Each JSON Pointer is limited to 20,000 characters.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"rules\",\n        \"label\": \"Filter conditions\",\n        \"value\": \"[{\\\"path\\\":\\\"/score\\\",\\\"operator\\\":\\\"number-gte\\\",\\\"value\\\":80}]\",\n        \"type\": \"textarea\",\n        \"help\": \"A JSON array of conditions. Operators: equals, not-equals, contains, starts-with, ends-with, number-gt, number-gte, number-lt, number-lte, exists, missing, type. Use path/operator/value; omit value for exists or missing. Up to 20 conditions.\"\n      },\n      {\n        \"key\": \"match\",\n        \"label\": \"Keep records matching\",\n        \"value\": \"All\",\n        \"type\": \"select\",\n        \"values\": [\n          \"All\",\n          \"Any\"\n        ]\n      },\n      {\n        \"key\": \"invalid\",\n        \"label\": \"Invalid JSONL records\",\n        \"value\": \"Stop on invalid lines\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Stop on invalid lines\",\n          \"Skip invalid lines\"\n        ]\n      }\n    ],\n    \"live\": true,\n    \"presentation\": \"metrics\",\n    \"note\": \"Filter one JSON value per line with explicit conditions, without evaluating expressions. String comparisons are case-sensitive and numbers are not coerced from strings. Missing matches only the missing operator. Invalid lines block export unless you explicitly choose to skip them; the report always identifies excluded lines. Runs on your device. Up to 1,000,000 input characters, 50,000 values per JSON document and 64 nesting levels. Duplicate JSON keys, unsafe integers, negative zero and decimals that would change on JSON serialization are rejected rather than rounded. Quote precision-sensitive numbers as strings. Output whitespace and object-member order may change. Each JSON Pointer is limited to 20,000 characters.\",\n    \"experience\": {\n      \"automatic\": true,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"JSONL records\",\n      \"placeholder\": \"{\\\"name\\\":\\\"Ana\\\",\\\"score\\\":90}\\n{\\\"name\\\":\\\"Bea\\\",\\\"score\\\":70}\\n{\\\"name\\\":\\\"Cam\\\",\\\"score\\\":\\\"95\\\"}\\n\",\n      \"help\": \"Paste text to process locally. Review the result before downloading. Results update as you type. Up to 1,000,000 characters.\",\n      \"action\": null\n    },\n    \"mode\": \"automatic\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nFilter JSON Lines with explicit field conditions. Export matching records and a report of their original line numbers.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use JSONL filter\n\n1. Paste JSONL and enter the filter conditions.\n2. Choose All or Any and decide whether invalid lines should block export.\n3. Review the matching and invalid counts, then download the JSONL and source-line report.\n\n## Useful next steps\n\n- [JSONL validator](https://happytails.ai/en/data-tools/jsonl-validator/) ([Markdown](https://happytails.ai/en/data-tools/jsonl-validator.md))\n\n- [JSON array grouper](https://happytails.ai/en/data-tools/json-array-grouper/) ([Markdown](https://happytails.ai/en/data-tools/json-array-grouper.md))\n\n- [JSON path inventory](https://happytails.ai/en/data-tools/json-path-inventory/) ([Markdown](https://happytails.ai/en/data-tools/json-path-inventory.md))\n\n## Write conditions without executing code\n\nEnter conditions as a JSON array of objects containing path, operator and value. Paths use JSON Pointer syntax. Supported operators include equality, text contains, prefix and suffix, numeric comparisons, existence, missing and type. Omit value for exists and missing; use All or Any to combine up to 20 conditions.\n\n### Compare values without hidden conversion\n\nText matching is case-sensitive. Numeric comparisons accept JSON numbers and do not convert numeric strings. Equality compares values by type and structure. Missing paths match only the missing operator, including when using not-equals. No expressions or regular expressions are evaluated.\n\n### Choose explicitly how invalid lines are handled\n\nInvalid input blocks export by default. Choose Skip invalid lines to export matches from accepted lines, with every invalid line counted in the report. The report lists the original one-based source lines for exported records. A valid filter with no matches produces an empty JSONL file.\n"
}