As JSON
Interpret note content as JSON, automatically stripping surrounding text, code fences, and other noise. Optionally extract specific fields.
Purpose
- Extract JSON from LLM responses with preambles or explanations
- Strip markdown code fences (
json ...) - Handle mixed content with embedded JSON
- Extract specific field values
- Validate JSON structure
Input Format
Accepts a Note containing JSON (clean or embedded):
- Clean JSON:
{"key": "value"} - Code fenced:
```json\n{"key": "value"}\n``` - With preamble:
Here's the data:\n{"key": "value"} - With trailing text:
{"key": "value"}\nAs you can see...
Parameters
Optional:
- field - Field name to extract (searches recursively, e.g., "url", "title", "email")
- all - If true, returns all matching fields, one per line; if false/omitted, returns first match (default: false)
Output Format
- No field: Full parsed JSON as formatted text
- With field (all=false): First matching field value as text
- With field (all=true): all matching field values, one per line
- Field not found: note-null
- JSON not identified: FAIL (hard error)
Usage Examples
Extract JSON from LLM response: {"type":"as-json","target":"$llm_response","out":"$parsed"}
Extract first matching field: {"type":"as-json","target":"$response","args":{"field":"title"},"out":"$title"}
Extract all matching fields: {"type":"as-json","target":"$response","args":{"field":"url","all":true},"out":"$all_urls"}
Guidelines
- Strips leading/trailing text and code fences automatically
- Field search is recursive - finds field at any depth
- Field not found returns note-null (soft failure, plan continues)
- No valid JSON found triggers FAIL (hard failure, plan should handle)
- Preserves data types in extracted values
- Default extracts first match; use
all: truefor all matches
Examples
Extract first match:
Input: {"results": [{"url": "https://example.com/1"}, {"url": "https://example.com/2"}]}
field: "url"
Output: https://example.com/1
Extract all matches:
Input: {"results": [{"url": "https://example.com/1"}, {"url": "https://example.com/2"}]}
field: "url", all: true
Output: https://example.com/1\nhttps://example.com/2
Strip code fence:
Input: Here's the data:\n\``json\n{"count": 42}\n``` field: "count" Output:42`
Missing field:
Input: {"name": "Alice"}
field: "email"
Output: note-null
Output ONLY the selected information as shown above, no introductory, explanatory, reasoning, code fences, etc.