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

读取每行含JSON的TXT文件,获取data字段字节大小(wc -c)遇阻

如何提取JSON行中data字段的字节大小

嘿,我来帮你搞定这个问题!你遇到的核心问题是:直接用wc -c没法精准提取出JSON里data字段的字节数——要么是算到了整行JSON的大小,要么是不小心把额外的换行符也算进去了。下面给你几个实用的解决方案,都是处理这种每行一个独立JSON场景的:

方法一:用jq直接计算(推荐,高效简洁)

jq是处理JSON的神器,它本身就能直接计算字符串的字节数,完全不用依赖wc,还能避免换行符的坑。

假设你的testear.txt内容长这样:

{"saddr": "192.168.1.1", "data": "hello world"}
{"saddr": "10.0.0.1", "data": "你好,世界"}

如果只想输出每行data的字节数,直接跑这条命令就行:

jq -r '.data | bytes | length' testear.txt

解释一下:

  • .data:提取出每行JSON里的data字段
  • bytes:把字符串转换成字节数组(处理UTF-8字符时,字节数和字符数可能不一样,比如中文每个字占3字节)
  • length:计算字节数组的长度,也就是data的字节大小

要是你想同时输出saddr和对应的data字节数,可以用这个脚本:

#!/bin/bash
while IFS= read -r json_line; do
  # 用jq格式化输出saddr和data_size
  result=$(echo "$json_line" | jq -r '{saddr: .saddr, data_byte_size: (.data | bytes | length)}')
  echo "$result"
done < testear.txt

方法二:用Python处理(跨平台,适合没有jq的环境)

如果你的机器上没装jq,用Python也能轻松搞定,而且处理编码问题更稳妥:

#!/usr/bin/env python3
import json
import sys

for line in sys.stdin:
    try:
        # 解析每行的JSON
        json_obj = json.loads(line.strip())
        # 把data字符串转成UTF-8字节,再计算长度
        data_byte_len = len(json_obj['data'].encode('utf-8'))
        # 可以改成你想要的输出格式,比如同时打印saddr
        print(f"saddr: {json_obj['saddr']}, data字节数: {data_byte_len}")
    except Exception as e:
        # 处理解析错误,避免脚本崩溃
        print(f"处理行时出错: {e}", file=sys.stderr)

把这个脚本保存成calculate_data_size.py,然后运行:

python3 calculate_data_size.py < testear.txt

为什么之前用wc -c不行?

你之前可能尝试了类似cat testear.txt | wc -c或者提取data后直接wc,但问题出在:

  • 如果直接算整行,得到的是整个JSON行的字节数,不是data字段的
  • 如果用echo "$data" | wc -c,echo会自动在末尾加一个换行符,导致结果多1个字节(比如data是"hello",实际字节数是5,但wc会输出6)

用上面的方法就能完美避开这些坑啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:17:07