You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Racket中安全美观格式化JSON?无需依赖jq

无需依赖jq的Racket JSON格式化方案

你的原代码依赖外部工具jq,不仅需要系统提前安装该工具,还存在shell注入风险(比如JSON字符串包含特殊shell字符时,可能触发错误或危险操作),同时字符串转义逻辑也不够严谨。

Racket标准库自带json模块,完全可以实现无依赖的JSON格式化,以下是更安全、简洁的优化方案:

#lang racket
(require json)

(define (pretty-print-json json-str)
  (with-handlers ([exn:fail? (λ (e) (eprintf "无效JSON: ~a\n" (exn-message e)))])
    ; 将JSON字符串解析为Racket原生数据结构
    (define json-data (read-json (open-input-string json-str)))
    ; 带缩进输出JSON,设置缩进为2个空格
    (write-json json-data (current-output-port) #:indentation 2)
    (newline)))

方案优势:

  • 无外部依赖:仅使用Racket标准库,无需系统安装jq
  • 安全可靠:避开shell注入风险,直接操作JSON数据结构而非字符串拼接
  • 严谨的错误处理:自带JSON合法性校验,解析失败时会给出明确错误提示
  • 格式可自定义:通过#:indentation参数可自由调整缩进空格数,还能通过其他参数控制换行、空格等细节

示例使用:

(pretty-print-json "{\"name\":\"Alice\",\"age\":30,\"hobbies\":[\"reading\",\"coding\"]}")

输出结果:

{
  "name": "Alice",
  "age": 30,
  "hobbies": [
    "reading",
    "coding"
  ]
}

内容的提问来源于stack exchange,提问作者MohamedLEGH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:27:45