假设我们有一个a.json
文件。该文件包含许多属性。
例如,在文件中,我仅显示两个属性“名称”和“年龄”。
实际上,尽管有更多具有数字值的属性。
{
"name":[
"James",
"Alek",
"Bob"
],
"age":[
35,
25,
23
]
...//other attributes with numerical values
}
我们如何像下面这样转换文件?
{
"name":[
"James",
"Alek",
"Bob"
],
"age":[
"35",
"25",
"23"
]
...//other attributes with numerical values
}
答案 0 :(得分:3)
jq
解决方案您可以使用jq
的{{3}}内置函数来递归遍历JSON值,检查其walk()
并转换数字type
。
假设您的JSON存储在文件input.json
中,则命令类似于:
jq 'walk(if type == "number" then tostring else . end)' input.json
它会将修改后的JSON转储到屏幕上,并且其输出可以重定向到另一个文件(> output.json
)。
最有可能的是,以上命令失败并显示错误消息:
jq: error: walk/1 is not defined at <top-level>, line 1:
这意味着walk()
内置不是您所使用的jq
版本中内置的(!)。该问题已在两年前报告(问题tostring()
),但显然不是错误,而是可选功能。内置的定义可以在Github的项目页面上#1106。下载并保存到本地文件后,可以使用downloaded加载并使用内置模块。
您的工作流程如下:
# Download the builtins module (only once) and save it in './builtin.jq'
curl -O https://raw.githubusercontent.com/stedolan/jq/master/src/builtin.jq
# Process the data
jq 'include "./builtin"; walk(if type == "number" then tostring else . end)' input.json > output.json
仅此而已!