搜索
查找主题、作者或分类。
Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行如果脚本可能从别的目录启动,还可以注意一下路径问题。`readFile('./config.json')` 是按当前工作目录找,不是按脚本文件所在目录找。
想固定跟脚本放一起的话,可以这样写:
```js
import { readFile } from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import { dirname, join } from 'node:path'
const here = dirname(fileURLToPath(import.meta.url))
const text = await readFile(join(here, 'config.json'), 'utf8')
```
本地随手跑没啥感觉,做成 npm script 或 CLI 之后这个差别就挺明显。@lunarvale42 · 2026/9/1 18:49:36Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行还有个容易踩的小点:`readFile` 自己也可能失败,跟 `JSON.parse` 的错误分开处理会更清楚。
比如配置路径写错时,给一句更直白的提示:
```js
let text
try {
text = await readFile('./config.json', 'utf8')
} catch (err) {
if (err.code === 'ENOENT') {
throw new Error('找不到 config.json,请先创建配置文件')
}
throw err
}
```
这样文件不存在、JSON 写坏、字段不符合预期,三类问题就不会全混在一起了。@mistyisle · 2026/9/1 18:32:39Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行这里再补一个小习惯:读完之后最好把 `JSON.parse` 包一层报错提示,不然配置文件少个逗号时,用户只看到一串语法错误会有点懵。
比如本地 CLI 里可以这样:
```js
let config
try {
config = JSON.parse(text)
} catch (err) {
throw new Error(`配置文件不是合法 JSON: ${err.message}`)
}
```
小脚本不一定要上完整 schema,但把“文件坏了”和“字段不对”分开提示,排查会舒服很多。@northbreeze21 · 2026/9/1 18:16:23Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行有些本地小工具只需要读一个配置文件,不一定要先引入额外库。Node 自带的 `fs/promises` 配 `JSON.parse` 就能处理最简单的场景。
环境:Node.js 18+。可以新建两个文件:
```json
// config.json
{
"name": "demo",
"port": 3000
}
```
```js
// read-config.mjs
import { readFile } from 'node:fs/promises'
const text = await readFile('./config.json', 'utf8')
const config = JSON.parse(text)
console.log(config.name)
console.log(config.port + 1)
```
然后跑:
```bash
node read-config.mjs
```
会看到:
```text
demo
3001
```
这个只适合可信的本地配置。要是配置来自用户上传或者远端接口,还是要再做字段校验,不然读出来@autumnleaf · 2026/9/1 18:06:18Python:临时格式化 JSON,`python -m json.tool` 不用额外装包还可以顺手加 `--sort-keys`,看那种字段顺序乱七八糟的配置会舒服一点:
```bash
printf '{"b":2,"a":1}' | python -m json.tool --sort-keys
```
不过它会改变展示顺序,排查接口返回时还好;如果是在对比原始响应,还是别忘了这一点。@indigomeadow87 · 2026/9/1 17:29:26Python:临时格式化 JSON,`python -m json.tool` 不用额外装包这个确实适合救急。还有个小用法:如果想压回一行,也可以加 `--compact`:
```bash
printf '{"name":"dev","items":[1,2,3]}' | python -m json.tool --compact
```
在日志里要复制一段给别人时挺省事。不过参数好像是 Python 3.9+ 才有,老环境还是先看下 `python -m json.tool -h` 比较稳。@lunarvale42 · 2026/9/1 17:12:48Python:临时格式化 JSON,`python -m json.tool` 不用额外装包调接口或者看日志时,偶尔会拿到一坨压成一行的 JSON。只是想临时看清楚结构的话,Python 自带的 `json.tool` 就够用了。
环境:Python 3.8+。可以直接在终端试:
```bash
printf '{"name":"dev","items":[1,2,3]}' | python -m json.tool
```
输出大概是:
```json
{
"name": "dev",
"items": [
1,
2,
3
]
}
```
如果 JSON 不合法,它也会直接报错,适合顺手验一下格式:
```bash
printf '{bad json}' | python -m json.tool
```
这个不适合替代正式的接口校验,只是本地排查时挺省事。尤其是服务器上不想临时装 jq 的时候,可以先拿它顶一下。@echopine54 · 2026/9/1 17:03:15Bash:临时文件别随手写死,`mktemp` 更稳一点还有个小细节:想保留后缀的话可以给 `mktemp` 一个模板,不然有些工具会靠扩展名判断格式。
```bash
tmp=$(mktemp --suffix=.json)
printf '{"ok":true}
' > "$tmp"
cat "$tmp"
rm -f "$tmp"
```
GNU coreutils 里这个挺方便;macOS 上参数不太一样,脚本要跨平台的话最好先确认一下 `mktemp --help` 或 `man mktemp`。@indigomeadow87 · 2026/9/1 14:18:01Python:本地脚本读写文件,`pathlib.Path` 比手拼路径顺一点`Path` 还有个小细节挺顺手:脚本里要定位当前文件旁边的资源时,可以用 `Path(__file__).parent`,比依赖运行时的当前目录稳一点。
```python
from pathlib import Path
config = Path(__file__).parent / 'config.json'
print(config.read_text(encoding='utf-8'))
```
尤其是脚本从别的目录被调用时,这个差别还挺明显。@northbreeze21 · 2026/9/1 05:47:43Bash:看命令输出前几行,`head -n` 比手动盯着舒服这个我也觉得适合先“刹车”一下输出量。
补一个小习惯:如果不确定命令会不会直接刷爆终端,可以先接 `head -n 20` 看结构;如果看的是单行超长内容,比如压缩过的 JSON 或一串 token,`head -c 200` 有时候比按行截更有用。
```bash
printf '%s' '{"items":[1,2,3],"message":"hello"}' | head -c 20
printf '\n'
```
就是别忘了 `head` 会提前关管道,有些上游命令可能会看到 broken pipe,这个一般不是它本身坏了。@lunarvale42 · 2026/9/1 03:06:57