下载 jq
git clone https://github.com/stedolan/jq.git
打 patch
cd jq
patch -p1 < ../jq.patch
编译
. /opt/fsl-imx-xwayland/5.4-zeus/environment-setup-aarch64-poky-linux
make
jq.patch 文件如下
diff -uprN jq-old/Makefile jq-new/Makefile
--- jq-old/Makefile 1970-01-01 08:00:00.000000000 +0800
+++ jq-new/Makefile 2021-01-30 13:58:23.709740712 +0800
@@ -0,0 +1,39 @@
+SDKTARGETSYSROOT=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux
+CC = aarch64-poky-linux-gcc --sysroot=$(SDKTARGETSYSROOT)
+CXX = aarch64-poky-linux-g++ --sysroot=$(SDKTARGETSYSROOT)
+LD = aarch64-poky-linux-ld --sysroot=$(SDKTARGETSYSROOT)
+AR = aarch64-poky-linux-ar
+
+export INCLUDE=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux/usr/include
+export C_INCLUDE_PATH=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux/usr/include
+export CPLUS_INCLUDE_PATH=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux/usr/include
+
+LIBJQ_SRC = src/builtin.c src/bytecode.c src/compile.c src/execute.c \
+ src/jq_test.c src/jv.c src/jv_alloc.c src/jv_aux.c \
+ src/jv_dtoa.c src/jv_file.c src/jv_parse.c src/jv_print.c \
+ src/jv_unicode.c src/linker.c src/locfile.c src/util.c \
+ src/decNumber/decContext.c src/decNumber/decNumber.c \
+ src/jv_dtoa_tsd.c src/lexer.c src/parser.c src/main.c
+
+CFLAGS = -I./ -Wextra -Wall -Wno-missing-field-initializers \
+ -Wno-unused-parameter -Wno-unused-function \
+ -DHAVE_STRPTIME -DIEEE_8087
+
+bin_PROGRAMS = src/jq
+
+ver="`{ ./scripts/version || echo '$(VERSION)' ; } | sed 's/.*/\#define JQ_VERSION \"&\"/'`"
+
+default: clean
+ echo "$(ver)" > src/version.h
+ sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/\\n"/' ./src/builtin.jq > src/builtin.inc
+ make build
+
+build: $(LIBJQ_SRC:.c=.o)
+ $(CC) -o $(bin_PROGRAMS) $(LIBJQ_SRC:.c=.o) -lm -lpthread
+
+install:
+ cp -f $(bin_PROGRAMS) ../../../customer/bin/
+
+clean:
+ rm -f $(bin_PROGRAMS) $(LIBJQ_SRC:.c=.o)
+
diff -uprN jq-old/src/builtin.c jq-new/src/builtin.c
--- jq-old/src/builtin.c 2021-01-30 09:32:07.000000000 +0800
+++ jq-new/src/builtin.c 2021-01-30 13:33:39.244479198 +0800
@@ -1,4 +1,4 @@
-#define _BSD_SOURCE
+#define _DEFAULT_SOURCE
#define _GNU_SOURCE
#ifndef __sun__
# define _XOPEN_SOURCE
用法,参考
https://www.ibm.com/developerworks/cn/linux/1612_chengg_jq/index.html
假如有一个xxx.json文件内容如下:
{
"Age": 25,
"Email": {
"Google": "san.zhang@gmail.com",
"QQ": "zhangsan@qq.com"
},
"Industry": "IT",
"Language": [
"C",
"C++"
],
"Name": "Zhangsan"
}
打印整个json文件的内容:
jq -r '.' xxx.json
查询某个key的值:
jq -r '.Age' xxx.json
jq -r '.Email' xxx.json
jq -r '.Industry' xxx.json
jq -r '.Language' xxx.json
jq -r '.Name' xxx.json
查询某个嵌套key的值:
jq -r '.Email|.Google' xxx.json
或
jq -r '.Email.Google' xxx.json
查询某个数组的值:
jq -r '.Language.[1]' xxx.json
或
jq -r '.Language[1]' xxx.json
设置某个key的值(不会改写xxx.json的内容, 仅仅是标准输出):
整数: jq --argjson v 26 '.Age=$v' xxx.json
字符串: jq --arg v "si.li@gmail.com" '.Email.Google=$v' xxx.json
字符串: jq --arg v "education" '.Industry=$v' xxx.json
字符串: jq --arg v "Java" '.Language[0]=$v' xxx.json
字符串: jq --arg v "si.li" '.Name=$v' xxx.json