JSON处理利器:jq命令行工具在鸿蒙PC上的完整适配实战

目录


1. 背景介绍

1.1 jq 工具简介

jq 是一个轻量级且灵活的命令行 JSON 处理器,类似于 sedawkgrep 等工具,但专门用于处理 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 数据无处不在:

  1. API 响应处理:解析和处理 REST API 返回的 JSON 数据
  2. 配置文件管理:查询和修改 JSON 格式的配置文件
  3. 日志分析:从 JSON 格式的日志中提取关键信息
  4. 数据转换:在不同 JSON 格式之间进行转换
  5. 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安装

  1. 下载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
  1. 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 语言项目,适配工作主要包括:

  1. 交叉编译配置:配置 Autotools 支持交叉编译到 aarch64-unknown-linux-musl
  2. 依赖处理:使用内置的 oniguruma 和 decNumber,避免外部依赖
  3. 静态链接:启用静态链接,实现零运行时依赖
  4. 打包配置:创建 HNP(HarmonyOS Native Package)包配置文件
  5. 构建脚本:编写自动化构建脚本,支持交叉编译环境

2.3 技术难点

2.3.1 交叉编译配置

挑战

  • Autotools 的交叉编译配置复杂
  • 需要正确设置编译器、链接器和 sysroot
  • C 预处理器(CPP)配置需要特殊处理

解决方案

  • 使用 --host=aarch64-unknown-linux-musl 指定目标平台
  • 显式设置 CCCPPCFLAGSLDFLAGS 等环境变量
  • 配置 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 问题诊断

在交叉编译过程中,我们遇到了以下主要问题:

  1. CPP 环境变量设置问题
  2. oniguruma 子模块配置问题
  3. 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 技术价值

  1. 展示了 C 语言项目的鸿蒙化适配方法

    • Autotools 交叉编译配置
    • 静态链接实现
    • HNP 包管理集成
  2. 提供了 JSON 处理工具

    • 为鸿蒙PC开发者提供强大的 JSON 处理能力
    • 支持 API 响应处理、配置文件管理、日志分析等场景
  3. 积累了适配经验

    • 交叉编译配置最佳实践
    • 依赖管理策略
    • 构建脚本编写规范

7.3 后续优化方向

  1. 性能优化:针对鸿蒙PC平台进行性能调优
  2. 功能扩展:添加鸿蒙PC特有的功能支持
  3. 文档完善:补充更多使用示例和最佳实践
  4. 测试覆盖:增加自动化测试用例

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数据处理能力:

  1. 查询提取: 使用点号(.)和方括号([])查询JSON数据
  2. 过滤转换: 使用 selectmapfilter等函数过滤和转换数据
  3. 格式化: 自动格式化JSON输出,支持紧凑模式(-c
  4. 流式处理: 支持流式处理大文件,内存占用低

jq的优势

  • ✅ 零依赖:所有必需库(oniguruma, decNumber)都内置
  • ✅ 高性能:C语言实现,处理速度快
  • ✅ 功能强大:支持复杂的JSON查询和转换
  • ✅ Unicode感知:正确处理Unicode字符

🎉 结语

本文档详细介绍了jq JSON处理器在鸿蒙PC平台上的适配过程。通过配置交叉编译、配置oniguruma子模块、实现静态链接等问题,成功实现了jq在鸿蒙PC平台上的部署。

jq工具为终端应用开发提供了强大的JSON处理支持,是开发脚本工具和数据处理的重要基础工具。希望本文档能够帮助开发者:

  • 📊 理解JSON数据处理的使用
  • 🔧 掌握Autotools项目适配OpenHarmony的方法
  • 📦 了解HNP包的构建和打包流程
  • 💻 学习命令行工具的开发实践

💬 如有问题或建议,欢迎反馈!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值