# As JSON

> Identify and extract JSON from mixed content, optionally extracting specific fields

- Skill: `bdambrosio/as-json` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add bdambrosio/as-json`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bdambrosio/as-json/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bdambrosio (https://skillmd.com/u/bdambrosio)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bdambrosio/as-json

---


# 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: true` for 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.

