目录
1. 背景介绍
1.1 jq 工具简介
jq 是一个轻量级且灵活的命令行 JSON 处理器,类似于 sed、awk、grep 等工具,但专门用于处理 JSON 数据。它使用可移植的 C 语言编写,零运行时依赖,可以轻松地切片、过滤、映射和转换结构化数据。
核心特性:
- 轻量级:零运行时依赖,只需要标准 C 库和数学库
- 高性能:C 语言实现,处理速度快
- 功能强大:支持复杂的 JSON 查询、过滤、转换操作
- 跨平台:可移植的 C 代码,支持多种操作系统
- 内置正则表达式:使用内置的 oniguruma 库,支持强大的正则表达式功能
- 内置十进制运算:使用内置的 decNumber 库,支持高精度十进制运算
主要功能:
- JSON 数据的查询和提取
- JSON 数据的过滤和转换
- JSON 数据的格式化和美化
- JSON 数据的合并和拆分
- 支持流式处理大文件
- 支持自定义函数和模块

1.2 适配目标
将 jq 1.8.3 版本适配到鸿蒙PC(HarmonyOS PC)平台,实现:
- 交叉编译支持(macOS/Linux → aarch64-linux-ohos)
- 使用鸿蒙SDK工具链进行编译
- 生成HNP格式的安装包
- 生成tar.gz格式的发布包
- 零外部运行时依赖(静态链接)
1.3 技术栈
- 编译工具链: OHOS SDK Native LLVM
- 目标平台: aarch64-linux-ohos
- 打包格式: HNP (HarmonyOS Native Package)
- 构建系统: Autotools (autoconf + automake)
- 链接方式: 静态链接
1.4 项目信息
| 项目信息 | 详情 |
|---|---|
| 项目名称 | jq (JSON Query) |
| 版本 | 1.8.2(适配版本)<br>1.8.1(原始版本) |
| 许可证 | MIT License |
| 源码仓库 | https://github.com/jqlang/jq |
| 适配平台 | 鸿蒙PC (aarch64-linux-ohos) |
| 项目类型 | C 语言项目(Autotools 构建系统) |
| 依赖 | 零外部运行时依赖 <br>(oniguruma 和 decNumber 内置) |
1.5 为什么需要 jq?
在现代软件开发中,JSON 数据无处不在:
- ✅ API 响应处理:解析和处理 REST API 返回的 JSON 数据
- ✅ 配置文件管理:查询和修改 JSON 格式的配置文件
- ✅ 日志分析:从 JSON 格式的日志中提取关键信息
- ✅ 数据转换:在不同 JSON 格式之间进行转换
- ✅ CI/CD 集成:在自动化脚本中处理 JSON 数据
jq 提供了强大的 JSON 处理能力,让命令行 JSON 操作变得简单高效。
2. 环境准备
2.1 系统要求
- 开发环境: macOS / Linux / Windows (WSL)
- 构建工具: autoconf, automake, libtool, flex, bison
- 鸿蒙SDK: OHOS SDK (包含native工具链)
2.2 SDK安装
- 下载SDK
# 下载鸿蒙SDK
cd ~
wget https://cidownload.openharmony.cn/version/Master_Version/ohos-sdk-full_ohos/20250819_020817/version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz
# 解压SDK
tar -zvxf version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz
- SDK目录结构
ohos-sdk/
├── native/
│ ├── llvm/bin/ # 编译器工具链
│ ├── sysroot/ # 系统根目录(头文件和库)
│ └── build-tools/ # 构建工具
└── toolchains/
└── hnpcli # HNP打包工具
2.3 项目结构
HarmonyOSPC/build/
├── build.sh # 主构建脚本
├── code/
│ └── jq/ # jq工具源码
│ ├── src/ # 源代码目录
│ ├── vendor/ # 第三方库(oniguruma, decNumber)
│ ├── configure.ac # Autotools配置
│ ├── build_ohos.sh # 鸿蒙构建脚本
│ └── hnp.json # HNP包配置
└── output/ # 构建输出目录
3. 项目结构分析
3.1 架构分析
jq 是一个 C 语言项目,使用 Autotools 构建系统:
jq 项目结构:
├── src/ # 源代码目录
│ ├── main.c # 主程序入口
│ ├── jv_*.c # JSON 值处理
│ ├── jq_*.c # jq 核心逻辑
│ └── ...
├── vendor/ # 第三方库(内置)
│ ├── oniguruma/ # 正则表达式库
│ └── decNumber/ # 十进制运算库
├── configure.ac # Autotools 配置文件
├── Makefile.am # Makefile 模板
├── hnp.json # HNP 包配置文件
└── build_ohos.sh # 鸿蒙构建脚本
2.2.2 适配策略
由于 jq 是 C 语言项目,适配工作主要包括:
- 交叉编译配置:配置 Autotools 支持交叉编译到
aarch64-unknown-linux-musl - 依赖处理:使用内置的 oniguruma 和 decNumber,避免外部依赖
- 静态链接:启用静态链接,实现零运行时依赖
- 打包配置:创建 HNP(HarmonyOS Native Package)包配置文件
- 构建脚本:编写自动化构建脚本,支持交叉编译环境
2.3 技术难点
2.3.1 交叉编译配置
挑战:
- Autotools 的交叉编译配置复杂
- 需要正确设置编译器、链接器和 sysroot
- C 预处理器(CPP)配置需要特殊处理
解决方案:
- 使用
--host=aarch64-unknown-linux-musl指定目标平台 - 显式设置
CC、CPP、CFLAGS、LDFLAGS等环境变量 - 配置
CPP="${CC} -E --target=${TARGET_PLATFORM} --sysroot=${SYSROOT}"确保预处理器正确工作
2.3.2 依赖管理
挑战:
- oniguruma 和 decNumber 需要正确编译
- 子模块的配置和编译需要特殊处理
解决方案:
- 使用
--with-oniguruma=builtin启用内置 oniguruma - decNumber 已经内置在项目中,无需额外配置
- 确保子模块正确初始化和配置
2.3.3 静态链接
挑战:
- 静态链接需要确保所有依赖都静态链接
- 避免动态库依赖
解决方案:
- 使用
--enable-all-static启用完全静态链接 - 在
LDFLAGS中添加-static选项 - 验证生成的二进制文件无动态库依赖
4. 问题诊断与解决
4.1 问题诊断
在交叉编译过程中,我们遇到了以下主要问题:
- CPP 环境变量设置问题
- oniguruma 子模块配置问题
- config.h 文件生成问题
4.2 解决方案
4.2.1 CPP 环境变量设置
问题:configure 脚本需要 C 预处理器,但默认可能使用 C++ 编译器。
解决方案:
# 修复 CPP 环境变量(configure 脚本需要 C 预处理器,而不是 C++ 编译器)
export CPP="${CC} -E --target=${TARGET_PLATFORM} --sysroot=${SYSROOT}"
4.2.2 oniguruma 子模块配置
问题:jq 使用内置的 oniguruma 库,需要先配置 oniguruma 子模块。
解决方案:在配置 jq 之前,先配置 oniguruma 子模块。
5. 详细修改步骤
3.1 构建脚本设计
3.1.1 build_ohos.sh 脚本结构
#!/bin/bash
# jq OpenHarmony build script
# jq is a lightweight and flexible command-line JSON processor
set -e
export JQ_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/jq.org/jq_1.8.2
# 1. 环境检查和准备
# 2. 子模块初始化
# 3. 生成 configure 脚本
# 4. 配置交叉编译
# 5. 编译
# 6. 安装
# 7. 打包 HNP
3.1.2 关键配置
交叉编译配置:
# 修复 CPP 环境变量(configure 脚本需要 C 预处理器)
export CPP="${CC} -E --target=${TARGET_PLATFORM} --sysroot=${SYSROOT}"
./configure \
--host=aarch64-unknown-linux-musl \
--prefix=${JQ_INSTALL_HNP_PATH} \
--with-oniguruma=builtin \
--enable-all-static \
--disable-docs \
CC="${CC}" \
CPP="${CPP}" \
CFLAGS="${CFLAGS}" \
LDFLAGS="${LDFLAGS} -static"
关键点:
--host=aarch64-unknown-linux-musl:指定目标平台--with-oniguruma=builtin:使用内置 oniguruma--enable-all-static:启用完全静态链接CPP="${CC} -E ...":正确配置 C 预处理器
3.2 HNP 包配置
3.2.1 hnp.json 配置
{
"type": "hnp-config",
"name": "jq",
"version": "1.8.2",
"install": {
"links": [
{
"source": "bin/jq",
"target": "jq"
}
]
}
}
配置说明:
name: 包名称version: 版本号(适配版本 1.8.2)install.links: 安装时的符号链接配置source: 源文件路径(相对于安装目录)target: 链接目标名称(将在 PATH 中可用)
3.3 构建流程
3.3.1 完整构建流程
# 1. 环境准备
export OHOS_SDK=/path/to/ohos-sdk
export TARGET_PLATFORM=aarch64-linux-ohos
export SYSROOT=${OHOS_SDK}/native/sysroot
# 2. 初始化子模块
git submodule update --init --recursive
# 3. 生成 configure 脚本
autoreconf -fi
# 4. 配置
./configure --host=aarch64-unknown-linux-musl \
--with-oniguruma=builtin \
--enable-all-static
# 5. 编译
make -j$(nproc)
# 6. 安装
make install DESTDIR=build_temp
# 7. 打包
hnp pack -i ${INSTALL_PATH} -o ${OUTPUT_PATH}/
6. 构建验证
6.1 构建与部署
4.1 构建环境要求
4.1.1 系统要求
- 开发环境:macOS 或 Linux
- OpenHarmony SDK:6.0.0.46-Beta1 或更高版本
- 构建工具:
- autoconf
- automake
- libtool
- make
- git(用于克隆子模块)
4.1.2 安装构建工具
macOS (Homebrew):
brew install autoconf automake libtool
Linux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install autoconf automake libtool build-essential
Linux (CentOS/RHEL):
sudo yum install autoconf automake libtool gcc make
4.2 构建步骤
4.2.1 执行构建
# 1. 进入构建目录
cd HarmonyOSPC/build
# 2. 执行构建脚本
SPECIFIC_DIR=jq ./build.sh --sdk /path/to/ohos-sdk
# 或者设置环境变量
export SPECIFIC_DIR=jq
./build.sh --sdk /path/to/ohos-sdk
4.2.2 构建输出
构建成功后,会在 output/ 目录生成以下文件:
output/
├── jq.hnp # HNP 包文件
└── ohos_jq_1.8.2.tar.gz # tar.gz 压缩包
安装路径:
/data/service/hnp/jq.org/jq_1.8.2/
├── bin/
│ └── jq # 可执行文件
├── share/
│ └── man/
│ └── man1/
│ └── jq.1 # 手册页
├── lib/
│ └── pkgconfig/
│ └── libjq.pc # pkg-config 文件
└── hnp.json # HNP 配置文件
4.3 部署到鸿蒙PC
4.3.1 方式一:使用 HNP 包安装
# 在鸿蒙PC上执行
hnp install jq.hnp
# 验证安装
jq --version
4.3.2 方式二:使用 tar.gz 包安装
# 1. 传输文件到鸿蒙PC
scp ohos_jq_1.8.2.tar.gz user@harmony-pc:/tmp/
# 2. 在鸿蒙PC上解压
cd /tmp
tar -xzf ohos_jq_1.8.2.tar.gz
# 3. 复制到安装目录
sudo mkdir -p /data/service/hnp/jq.org/
sudo cp -r jq_1.8.2 /data/service/hnp/jq.org/
# 4. 添加到 PATH(可选)
export PATH=$PATH:/data/service/hnp/jq.org/jq_1.8.2/bin
# 5. 验证安装
/data/service/hnp/jq.org/jq_1.8.2/bin/jq --version
4.3.3 方式三:手动安装
# 1. 创建安装目录
sudo mkdir -p /data/service/hnp/jq.org/jq_1.8.2/{bin,share/man/man1,lib/pkgconfig}
# 2. 复制文件
sudo cp jq /data/service/hnp/jq.org/jq_1.8.2/bin/
sudo cp jq.1 /data/service/hnp/jq.org/jq_1.8.2/share/man/man1/
sudo cp libjq.pc /data/service/hnp/jq.org/jq_1.8.2/lib/pkgconfig/
sudo cp hnp.json /data/service/hnp/jq.org/jq_1.8.2/
# 3. 设置执行权限
sudo chmod +x /data/service/hnp/jq.org/jq_1.8.2/bin/jq
# 4. 添加到 PATH
export PATH=$PATH:/data/service/hnp/jq.org/jq_1.8.2/bin
7. 使用示例
5.1 基本用法
5.1.1 读取和格式化 JSON
# 从标准输入读取并格式化输出(推荐,可直接运行)
echo '{"name":"jq","version":"1.8.2","description":"Command-line JSON processor"}' | jq '.'
# 紧凑输出(单行)
echo '{"name":"jq","version":"1.8.2"}' | jq -c '.'
# 如果要从文件读取,先创建文件:
# echo '{"name":"jq","version":"1.8.2"}' > data.json
# jq '.' data.json
5.1.2 提取字段值
# 提取单个字段(可直接运行)
echo '{"name":"jq","version":"1.8.2"}' | jq '.name'
# 提取多个字段
echo '{"name":"jq","version":"1.8.2","license":"MIT"}' | jq '{name: .name, version: .version}'
# 提取嵌套字段
echo '{"user":{"name":"Alice","age":30},"status":"active"}' | jq '.user.name'
5.1.3 数组操作
# 遍历数组(可直接运行)
echo '[1,2,3,4,5]' | jq '.[]'
# 获取数组元素
echo '[1,2,3,4,5]' | jq '.[0]'
echo '[1,2,3,4,5]' | jq '.[-1]' # 最后一个元素
# 数组过滤
echo '[{"name":"Alice","age":25},{"name":"Bob","age":17},{"name":"Charlie","age":30}]' | jq '.[] | select(.age > 18)'
# 数组映射
echo '[{"name":"Alice","age":25},{"name":"Bob","age":17}]' | jq '[.[] | .name]'
5.2 高级用法
5.2.1 数据转换
# 对象转数组(可直接运行)
echo '{"users":[{"name":"Alice"},{"name":"Bob"}]}' | jq '[.users[]]'
# 数组转对象
echo '[{"name":"Alice","age":25},{"name":"Bob","age":17}]' | jq '{users: [.[] | {name, age}]}'
# 合并对象
echo '{"name":"jq","version":"1.8.2"}' | jq '. + {new_field: "value"}'
5.2.2 条件处理
# 条件判断(可直接运行)
echo '{"name":"Alice","age":25}' | jq 'if .age > 18 then "adult" else "minor" end'
echo '{"name":"Bob","age":17}' | jq 'if .age > 18 then "adult" else "minor" end'
# 默认值
echo '{"name":"Alice"}' | jq '.name // "unknown"'
echo '{}' | jq '.name // "unknown"'
# 可选字段
echo '{"user":{"name":"Alice"}}' | jq '.user.name? // "N/A"'
echo '{}' | jq '.user.name? // "N/A"'
5.2.3 字符串操作
# 字符串长度(可直接运行)
echo '{"name":"jq"}' | jq '.name | length'
# 字符串分割
echo '{"tags":"apple,banana,cherry"}' | jq '.tags | split(",")'
# 字符串替换
echo '{"name":"old_name"}' | jq '.name | gsub("old"; "new")'
# 正则表达式匹配
echo '[{"email":"alice@example.com"},{"email":"bob@test.com"}]' | jq '.[] | select(.email | test("@example.com"))'
5.3 实际应用场景
5.3.1 API 响应处理
# 提取 API 响应中的数据
curl -s https://api.example.com/users | jq '.data[] | {id, name, email}'
# 过滤特定用户
curl -s https://api.example.com/users | jq '.data[] | select(.id == 123)'
5.3.2 配置文件管理
# 读取配置值(可直接运行)
echo '{"database":{"host":"localhost","port":3306}}' | jq '.database.host'
# 修改配置值
echo '{"database":{"host":"localhost","port":3306}}' | jq '.database.host = "newhost"'
# 添加配置项
echo '{"database":{"host":"localhost"}}' | jq '.database.port = 5432'
# 如果要从文件读取并保存,可以这样:
# echo '{"database":{"host":"localhost"}}' > config.json
# jq '.database.port = 5432' config.json > config.new.json
5.3.3 日志分析
# 提取错误日志(可直接运行)
echo '[{"level":"info","msg":"started"},{"level":"error","msg":"failed"},{"level":"info","msg":"completed"}]' | jq '.[] | select(.level == "error")'
# 统计日志级别
echo '[{"level":"info"},{"level":"error"},{"level":"info"},{"level":"warning"}]' | jq '[.[] | .level] | group_by(.) | map({level: .[0], count: length})'
# 时间范围过滤
echo '[{"timestamp":"2024-01-01","msg":"old"},{"timestamp":"2024-12-01","msg":"new"}]' | jq '.[] | select(.timestamp > "2024-01-01")'
8. 总结与最佳实践
8.1 技术亮点
6.1 零运行时依赖
实现方式:
- 使用
--enable-all-static启用完全静态链接 - oniguruma 和 decNumber 内置在项目中
- 只依赖标准 C 库和数学库
优势:
- 部署简单,无需安装额外依赖
- 运行稳定,不受系统库版本影响
- 适合嵌入式环境
6.2 交叉编译支持
实现方式:
- 使用 Autotools 的交叉编译机制
- 正确配置编译器、链接器和 sysroot
- 修复 C 预处理器配置问题
优势:
- 在 macOS/Linux 上编译,在鸿蒙PC上运行
- 开发效率高,无需在目标平台上编译
- 支持 CI/CD 自动化构建
6.3 HNP 包管理集成
实现方式:
- 创建标准的 HNP 包配置文件
- 支持
hnp install一键安装 - 自动创建符号链接到 PATH
优势:
- 符合鸿蒙PC包管理规范
- 安装和卸载方便
- 版本管理清晰
8.2 项目总结
7.1 适配成果
✅ 成功适配:jq 1.8.2 已成功适配到 鸿蒙PC 平台
✅ 功能完整:所有核心功能正常工作,包括:
- JSON 查询和提取
- JSON 过滤和转换
- JSON 格式化和美化
- 正则表达式支持
- 高精度十进制运算
✅ 零依赖:完全静态链接,零运行时依赖
✅ 易于部署:支持 HNP 包管理和手动安装
7.2 技术价值
-
展示了 C 语言项目的鸿蒙化适配方法
- Autotools 交叉编译配置
- 静态链接实现
- HNP 包管理集成
-
提供了 JSON 处理工具
- 为鸿蒙PC开发者提供强大的 JSON 处理能力
- 支持 API 响应处理、配置文件管理、日志分析等场景
-
积累了适配经验
- 交叉编译配置最佳实践
- 依赖管理策略
- 构建脚本编写规范
7.3 后续优化方向
- 性能优化:针对鸿蒙PC平台进行性能调优
- 功能扩展:添加鸿蒙PC特有的功能支持
- 文档完善:补充更多使用示例和最佳实践
- 测试覆盖:增加自动化测试用例
8.3 鸿蒙PC终端测试指南
8.1 安装验证
8.1.1 检查安装
# 检查 jq 是否已安装
which jq
# 检查版本信息
jq --version
# 检查帮助信息
jq --help
预期输出:
jq-1.8.2
8.1.2 验证功能
# 基本功能测试
echo '{"name":"jq","version":"1.8.2"}' | jq '.'
# 字段提取测试
echo '{"name":"jq","version":"1.8.2"}' | jq '.name'
# 数组操作测试
echo '[1,2,3,4,5]' | jq '.[] | . * 2'
8.2 常见问题排查
8.2.1 命令未找到
问题:执行 jq 命令时提示 command not found
原因:
- HNP 包未正确安装
- PATH 环境变量未配置
解决方案:
# 1. 检查 HNP 包是否安装
ls -la /data/service/hnp/jq.org/jq_1.8.2/bin/jq
# 2. 如果文件存在,添加到 PATH
export PATH=$PATH:/data/service/hnp/jq.org/jq_1.8.2/bin
# 3. 或者使用完整路径
/data/service/hnp/jq.org/jq_1.8.2/bin/jq --version
# 4. 如果文件不存在,重新安装 HNP 包
hnp install jq.hnp
8.2.2 权限问题
问题:执行 jq 时提示 Permission denied
解决方案:
# 设置执行权限
chmod +x /data/service/hnp/jq.org/jq_1.8.2/bin/jq
# 或者使用 sudo
sudo chmod +x /data/service/hnp/jq.org/jq_1.8.2/bin/jq
8.2.3 JSON 解析错误
问题:jq 无法解析 JSON 数据
解决方案:
# 1. 检查 JSON 格式是否正确
echo '{"name":"jq"}' | jq '.'
# 2. 使用 -r 选项输出原始字符串
echo '{"name":"jq"}' | jq -r '.name'
# 3. 使用 -c 选项紧凑输出
echo '{"name":"jq"}' | jq -c '.'
8.3 性能测试
8.3.1 大文件处理
# 测试 JSON 处理性能(可直接运行)
time echo '[1,2,3,4,5,6,7,8,9,10]' | jq '.[] | . * 2'
# 流式处理数组
echo '[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5}]' | jq -c '.[]' | head -3
# 如果要从文件读取大文件,可以这样:
# time jq '.' large.json
# jq -c '.[]' large.json | head -100
8.3.2 复杂查询性能
# 测试复杂查询性能(可直接运行)
time echo '[{"name":"Alice","age":25},{"name":"Bob","age":17},{"name":"Charlie","age":30}]' | jq '[.[] | select(.age > 18) | {name, age}]'
# 如果要从文件读取,可以这样:
# time jq '[.[] | select(.age > 18) | {name, age}]' users.json
8.4 参考资料
9.1 官方文档
- jq 官方文档:https://jqlang.org
- jq 在线试用:https://play.jqlang.org
- jq GitHub 仓库:https://github.com/jqlang/jq
9.2 OpenHarmony 相关
9.3 技术文档
- Autotools 文档:https://www.gnu.org/software/automake/manual/
- 交叉编译指南:https://wiki.osdev.org/Cross_Compiler
- 静态链接指南:https://www.gnu.org/software/libtool/manual/html_node/Linking-mode.html
9.4 相关项目
- oniguruma:https://github.com/kkos/oniguruma
- decNumber:https://speleotrove.com/decimal/decnumber.html
📎 附录
A. 📁 完整文件清单
📝 创建的文件:
- 🔧
build_ohos.sh- OpenHarmony构建脚本 - 📝
hnp.json- HNP包配置文件 - 📄
CHANGELOG- 变更日志(添加鸿蒙PC适配信息) - 📄
README.OPENSOURCE- 开源说明文档
📝 修改的文件:
- 🔧
build_ohos.sh- 配置交叉编译、配置oniguruma子模块、静态链接
📦 生成的文件:
- 📦
output/jq.hnp- HNP格式安装包 - 📦
output/ohos_jq_1.8.3.tar.gz- tar.gz格式发布包
B. 💻 参考命令
# 构建命令
cd /Users/lijiajun/ohos-sdk/HarmonyOSPC/build
SPECIFIC_DIR=jq ./build.sh --sdk /Users/lijiajun/ohos-sdk
# 查看构建输出
ls -lh output/ | grep jq
# 验证安装目录
tree ${HNP_PUBLIC_PATH}/jq.org/jq_1.8.3/
# 验证二进制文件格式(在macOS上)
file ${HNP_PUBLIC_PATH}/jq.org/jq_1.8.3/bin/jq
# 应该显示: ELF 64-bit LSB executable, ARM aarch64, statically linked
# 测试命令(在鸿蒙PC上)
export PATH=${HNP_PUBLIC_PATH}/jq.org/jq_1.8.3/bin:$PATH
jq --version
echo '{"name":"jq","version":"1.8.3"}' | jq '.'
echo '{"name":"jq","version":"1.8.3"}' | jq -c '.'
echo '[1,2,3,4,5]' | jq '.[] | . * 2'
# 如果出现"cannot execute binary file"错误,检查:
# 1. 二进制文件格式是否正确(应为ELF格式)
# 2. 是否使用了交叉编译(--host=aarch64-unknown-linux-musl)
# 3. 链接方式是否为静态链接(--enable-all-static)
# 4. oniguruma子模块是否正确配置
C. 📌 版本信息
- 📁 jq版本: 1.8.3
- 📅 适配日期: 2025-12-09
- 🎯 目标平台: aarch64-linux-ohos
- 🔧 构建系统: Autotools (autoconf + automake)
- 📦 依赖数量: 零外部运行时依赖(oniguruma和decNumber内置)
- 🔗 源仓库地址: https://github.com/jqlang/jq
- 🔗 适配完成仓库地址: https://gitcode.com/szkygc/jq4oh
D. 📚 相关资源
- 🌐 jq官方文档: https://jqlang.org
- 💻 jq GitHub仓库: https://github.com/jqlang/jq
- 📖 jq在线试用: https://play.jqlang.org
- 🌐 OpenHarmony PC开发者专区: https://gitcode.com/OpenHarmonyPCDeveloper
- 🌐 HarmonyOS PC 开发者社区: https://harmonypc.youkuaiyun.com/content
E. 💡 技术说明
JSON处理简介:
jq提供了强大的JSON数据处理能力:
- 查询提取: 使用点号(
.)和方括号([])查询JSON数据 - 过滤转换: 使用
select、map、filter等函数过滤和转换数据 - 格式化: 自动格式化JSON输出,支持紧凑模式(
-c) - 流式处理: 支持流式处理大文件,内存占用低
jq的优势:
- ✅ 零依赖:所有必需库(oniguruma, decNumber)都内置
- ✅ 高性能:C语言实现,处理速度快
- ✅ 功能强大:支持复杂的JSON查询和转换
- ✅ Unicode感知:正确处理Unicode字符
🎉 结语
本文档详细介绍了jq JSON处理器在鸿蒙PC平台上的适配过程。通过配置交叉编译、配置oniguruma子模块、实现静态链接等问题,成功实现了jq在鸿蒙PC平台上的部署。
jq工具为终端应用开发提供了强大的JSON处理支持,是开发脚本工具和数据处理的重要基础工具。希望本文档能够帮助开发者:
- 📊 理解JSON数据处理的使用
- 🔧 掌握Autotools项目适配OpenHarmony的方法
- 📦 了解HNP包的构建和打包流程
- 💻 学习命令行工具的开发实践
💬 如有问题或建议,欢迎反馈!
1143

被折叠的 条评论
为什么被折叠?



