如何通过jq命令将json文件中的所有整数转换为字符串?

时间:2018-08-22 11:13:06

标签: json jq

假设我们有一个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
} 

1 个答案:

答案 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

仅此而已!