生活分享
Claude Code|把 claude -p 接進有驗證的 JSON 流程
處理合法結果、錯誤、逾時與不完整輸出。這次輸出只要兩個欄位:summary 是非空的繁體中文摘要,taskIds 是不重複的待辦識別碼陣列。先把契約寫清楚,才能決定什麼資料不應往下傳。如果只是要求「回傳 JSON」,模型即使回傳一個空物件,語法上仍是合法 JSON,卻不能完成工作。
閱讀時間約 7 分鐘

本篇目錄
把 claude -p 放進腳本後,最重要的問題是程式如何判斷工作真的成功。本篇建立一條結構化資料流程:讀取假待辦資料、請 Claude 產生 JSON、驗證結果,再交給下一步。正常結果、錯誤結果、格式不符與不完整串流都有各自的處理方式。
先讀非互動執行Claude Code|非互動執行與 JSON 輸出用單次指令、管線與結構化輸出建立腳本。claude -p 讓你把一次任務放進腳本,由程序輸入提示並接收結果。本篇會先取得文字輸出,再保存 JSON 結果,最後使用 JSON Schema 要求固定欄位。你會同時檢查退出碼與結果內容,避免把一份存在的輸出檔誤認為執行成功。閱讀全文與除錯及測試Claude Code|除錯與補測試從重現問題走到修正與回歸測試。這篇用一個刻意準備的待辦錯誤,示範如何把症狀轉成重現步驟、定位原因、補測試並驗證修正。材料中的問題是勾選一筆待辦時改到其他項目;你會先看到預期失敗,再確認修正後同一案例通過,避免只憑「看起來正常」就結束除錯。閱讀全文。下載第 91 篇材料,在 starter 操作。需要 Node.js 22,只有真實模型呼叫需要有效 Claude 登入;預估閱讀 20 分鐘、實作 45 分鐘。
先定義後續程式需要什麼
閱讀完整文字說明
把 claude -p 接進有驗證的 JSON 流程,以流程和文件圖形呈現教學重點。
這次輸出只要兩個欄位:summary 是非空的繁體中文摘要,taskIds 是不重複的待辦識別碼陣列。先把契約寫清楚,才能決定什麼資料不應往下傳。如果只是要求「回傳 JSON」,模型即使回傳一個空物件,語法上仍是合法 JSON,卻不能完成工作。
材料中的 automation/schema.json 描述欄位型別與必要條件。Schema 驗證與業務驗證仍有差別:陣列裡都是字串,只能證明型別對了;是否真的涵蓋輸入中的 a、b、c,還要由呼叫者比對。不要把格式正確當成內容正確。
{
"type": "object",
"properties": {
"summary": { "type": "string", "minLength": 1 },
"taskIds": {
"type": "array",
"items": { "type": "string", "minLength": 1 },
"uniqueItems": true
}
},
"required": ["summary", "taskIds"],
"additionalProperties": false
}
分清楚 CLI 外殼與業務資料
JSON 輸出通常不只是你要求的物件,還包含 CLI 的結果類型、狀態及其他 metadata。使用結構化輸出時,先核對這一版回傳中放業務資料的位置,再解析其中欄位。本材料以 structured_output 為目標;不要把整個外殼直接存成產品需要的資料列。
下面的 fixture 是合成資料,用於測試解析器,並不是作者這次成功呼叫模型的證明。把合成與真實輸出分開命名,可以避免後續整理證據時誤把範例當成實測。
{
"type": "result",
"subtype": "success",
"is_error": false,
"structured_output": {
"summary": "三筆練習待辦",
"taskIds": ["a", "b", "c"]
}
}
建立失敗即停止的解析器
打開 automation/result.mjs。解析器先確認外層是成功結果,再檢查欄位型別、摘要是否空白及 id 是否重複。這裡是針對本課程契約的驗證器,不是通用 JSON Schema 引擎;若契約變複雜,應改用合適的標準驗證工具。
export function parseResult(text) {
const envelope = JSON.parse(text);
if (envelope.type !== 'result'
|| envelope.subtype !== 'success'
|| envelope.is_error === true) {
throw new Error('Claude did not return a successful result');
}
const data = envelope.structured_output;
if (!data || typeof data.summary !== 'string' || !data.summary.trim()
|| !Array.isArray(data.taskIds)
|| data.taskIds.some(id => typeof id !== 'string' || !id)) {
throw new Error('Invalid structured_output');
}
if (new Set(data.taskIds).size !== data.taskIds.length) {
throw new Error('Duplicate task ids');
}
return { summary: data.summary, taskIds: data.taskIds };
}
不合法時拋出錯誤,比回傳空陣列更容易察覺問題。若你把錯誤吞掉並預設 taskIds=[],下游程式可能把資料清空,卻留下成功狀態。本篇的命令列包裝會寫入 stderr 並使用非零退出碼,讓排程或 CI 能辨認失敗。
先跑離線的正常與錯誤案例
依序執行三個 fixture。第一個應顯示摘要及三個 id,第二個是模型執行錯誤,第三個把 taskIds 改成字串。後兩者都不能進入成功分支;檢查 $LASTEXITCODE 或 Bash 的 $?,確認它們真的回報非零。
node automation/parse-result.mjs fixtures/result-ok.json
node automation/parse-result.mjs fixtures/result-error.json
node automation/parse-result.mjs fixtures/result-bad-schema.json
再手動建立空檔、截斷 JSON 與重複 id 案例。錯誤位置應指向解析或驗證問題,而不是一律要求重新登入。如果連 fixture 都解析不了,先修本機程式;還不需要啟動真正的 Claude 呼叫。
使用參數陣列執行 Claude
材料的 automation/run-claude.mjs 用 Node spawn 呼叫 CLI,將 JSON Schema 當成單一參數模型參數(Model Parameters)是什麼模型參數是訓練時調整、用來把輸入轉成輸出的數值,例如權重與偏差。本文用簡單算式示例說明參數如何影響預測,區分模型參數、訓練超參數、提示詞與生成設定,並解釋參數量、數值精度和啟用參數為何是不同指標。讀完能更準確閱讀模型規格,理解參數增加不等於知識逐條增加,也不代表每次聊天都在重新訓練模型。閱讀全文,輸入資料則透過 stdin 傳入。這能避免把 JSON 內的引號、換行或使用者文字直接拼進 shell 命令。程式不使用 shell:true,也不把外部文字當成可以執行的指令。
node automation/run-claude.mjs
腳本設定小額預算上限、90 秒逾時、無工具模式與單次結果輸出;它不需要讀取其他專案,也沒有資料庫寫入。預算值是這份練習的停止條件,不能把它當成所有帳號的完整計費保證。若 CLI 不在 PATH,請先用 claude --version 確認安裝,再調整自己的環境。
登入狀態的檢查也不能只看本機是否留有帳號資訊。本次作者測試時,登入紀錄存在,但真正呼叫回報 OAuth 過期,因此實機驗證未通過。解析器仍應拒絕沒有合法 structured_output 的結果,不能因外層看似成功便繼續工作。
串流輸出要等真正結束
stream-json 會逐行輸出不同事件,不應把第一行 system 或中途 assistant 訊息當作最終結果。材料的 lastResult 先解析每一行,再確認只有一個最終 result,最後仍交給同一個 parseResult 驗證。中途網路斷線留下的半段文字,不能自動變成成功摘要。
node --test tests/automation.test.mjs
測試包括只有啟動事件、沒有最終結果的情況。你也可以將兩次執行的輸出接在同一檔案,觀察解析器拒絕兩個 result。這個設計能避免排程意外覆用 log 檔時,把上一輪成功當成這一輪的成功。
| 訊號 | 能證明什麼 | 還需要什麼 |
|---|---|---|
| 程序退出碼 0 | 命令正常結束 | 結果類型與欄位驗證 |
| JSON 語法正確 | 文字可解析 | Schema 與業務條件 |
| structured_output 合法 | 欄位符合需求 | 與原始資料比對 |
| 最終 id 正確 | 這個案例內容通過 | 保存版本及輸入證據 |
逾時、取消與重跑
逾時後先確認呼叫程序已結束,將結果標為未完成。不要立刻重跑一個會寫外部系統的任務,因為上一輪可能已產生副作用卻還沒回報。本篇只摘要假資料,因此重試比較單純;加入檔案或 API 寫入後,還要設計排程去重與恢復Claude Code|排程失敗怎麼辦:重複執行、漏跑與停止為一次排程建立可追查且不重複寫入的工作。排程可靠性不只在於準時啟動,還包括重複觸發時不重複產生結果、失敗後知道從哪裡補跑,以及停止後能分辨已完成與未完成。本篇先把工作做成可手動重跑的本機程式,再選一個實際可用的排程入口接上它。閱讀全文。
Windows 上終止一個程序不一定代表它自行啟動的所有後代程序都已關閉。本練習禁用工具以縮小範圍;日後開放工具時,需要使用適當的程序管理與明確的清理紀錄,不能把一行 kill 呼叫描述成通用的工作樹取消方案。
讓失敗輸出保留診斷價值
結構驗證失敗時,先區分程序沒有成功結束、外層結果標示失敗,以及內層資料不符合 schema。這三種情況的下一步不同:可能需要處理環境、重新安排任務,或調整資料契約。不要把所有失敗都改成空陣列,否則下游會把錯誤當成真的沒有資料。
保留退出碼、錯誤分類與必要摘要即可,含有使用者資料的完整輸出留在受控本機位置。正式流程讀取的是驗證後資料,診斷紀錄則用來說明為何某次執行沒有提供結果。
完成判準與小練習
交付原始輸入、Schema、解析器、正常及失敗 fixtures,並保存一次真實呼叫的版本與結果。驗收先看故障是否被攔住,再看正常資料能否通過;一個永遠拒絕所有輸入的解析器也不是完成。
至少確認四點:摘要不是空白、id 不重複、id 與輸入一致、錯誤不會被存成空成功結果。若你尚未完成有效登入,離線測試仍可完成,但驗收表要將真實模型呼叫標示為待測。不要從範例 JSON 推論帳號連線正常。
小練習是增加一個 completedCount 欄位,同時修改 Schema、解析器、fixture 與測試。故意只改其中兩處,觀察契約不同步如何被檢出。接著可將這條流程接到測試儲存庫 CIClaude Code|CI 審查助手:權限、fork 與結果附件在測試儲存庫跑一次可審閱的工作流程。這一篇建立可以下載審查結果的 GitHub Actions 練習:PR 只執行沒有模型秘密的基準測試,模型審查由預設分支手動觸發,輸出通過結構驗證後才保存成附件。你會核對真正的 workflow run、來源提交與取消狀態,避免只貼 YAML 就宣稱 CI 已完成。閱讀全文或 Agent SDKClaude Code|Agent SDK:保存狀態、取消與重新接續建立可中斷且可診斷的最小代理程式。把 Claude 放進程式後,除了收到回答,還要知道程序何時開始、是否真的完成、取消後留下什麼,以及下次能否接續。本篇使用官方 TypeScript Agent SDK,建立帶狀態檔、事件紀錄與停止上限的最小 runner,只處理一個合成標記,不連外部業務系統。閱讀全文,沿用相同的結果驗證原則。
回 Claude Code 教學總目錄Claude Code 完整教學目錄:從入門到自動化依平台、程度與功能找到需要的教學,從 96 篇文章與共用練習專案逐步完成操作。這個教學中心把 Claude Code 分成 96 個可以獨立閱讀的小題目,從桌面、CLI、網頁與手機開始,再學 MD 規則、常用指令、Skills、MCP 與自動化。你可以依推薦路線循序學習,也可以直接搜尋正在遇到的功能、命令或檔名。目錄依目前公開狀態顯示可閱讀文章。閱讀全文
同主題延伸閱讀
生活分享
Claude Code|建立第一個 mod:在 Claude Code 行程內數工具呼叫
寫一個三檔案的 mod,用驗證器與測試確認它掛上的事件。文件把 mod 定義成多了入口檔的 plugin:入口檔叫 hooks module,Claude Code 在事件發生時呼叫裡面的函式,函式可以觀察、改寫或接手事件。
生活分享
Claude Code|Git Worktree 平行工作
隔離多個任務的檔案與分支。Git Worktree 讓同一儲存庫擁有多個工作目錄,各自使用分支與檔案。本篇會把待辦篩選與文件整理分開,確認兩個 session 不會直接改到彼此的檔案,再把其中一個成果整合回主分支。你也會知道何時可以安全清理工作目錄。
生活分享
Claude Code|雙 Worktree 實作與衝突整合
隔離兩項功能,最後完成整合與回歸。兩個 Claude 工作階段同時編輯專案,最容易出現的問題是互相改到同一份檔案,或各自測試通過、整合後卻失敗。本篇用兩個 Worktree 分別處理篩選預設值與介面文字,故意製造一次小衝突,再完成整合、驗證與清理。你不需要先啟用 Agent Teams。
生活分享
Claude Code|比較流程品質、用量與執行時間
以同一資料集比較兩種工作方法。比較兩種 Claude 工作方法時,不能只挑成功那一次,也不能只看第一個答案有多快。本篇用固定案例、原始紀錄和一致判準,比較品質、重試、等待與人工整合時間,最後寫出有樣本數與限制的報告,而不是保證某個方法一定省錢。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Run Claude Code programmatically · 查證日期:
- Claude Code GitHub Actions · 查證日期:
- Run prompts on a schedule · 查證日期:
- Agent SDK overview · 查證日期: