使用 jq 将 json 的值从 int 转换为 string
Convert value of json from int to string using jq
给出的 json 看起来像:
[{"id":1,"firstName":"firstName1","lastName":"lastName1"},
{"id":2,"firstName":"firstName2","lastName":"lastName2"},
{"id":3,"firstName":"firstName3","lastName":"lastName3"}]
将 id 值从 int 转换为字符串然后保存文件的最佳方法是什么?
我试过:
echo "$(jq -r '[.[] | .id = .id|tostring]' test.json)" > test.json
但这似乎将每个条目放入一个字符串中并添加反斜杠
[
"{\"id\":1,\"firstName\":\"firstName1\",\"lastName\":\"lastName1\"}",
"{\"id\":2,\"firstName\":\"firstName2\",\"lastName\":\"lastName2\"}",
"{\"id\":3,\"firstName\":\"firstName3\",\"lastName\":\"lastName3\"}"
]
|
的优先级低于分配 (=
)。表达式 .id = .id | tostring
被解释为 (.id = .id) | tostring
.
分配确实改变了任何东西,可以删除。脚本变为 [ .[] | tostring ]
,解释输出(每个对象被序列化为 JSON 到一个字符串中)。
解决方案是使用括号强制执行所需的顺序。
命令是:
jq '[ .[] | .id = (.id | tostring) ]' test.json
不要使用进程扩展 ($(...)
) 来编写 echo
命令行。它效率低下且不需要。
将 jq
的输出直接重定向到文件。使用与输入文件不同的文件(否则最终会破坏您的数据)。
jq '[ .[] | .id = (.id | tostring) ]' test.json > output.json
给出的 json 看起来像:
[{"id":1,"firstName":"firstName1","lastName":"lastName1"},
{"id":2,"firstName":"firstName2","lastName":"lastName2"},
{"id":3,"firstName":"firstName3","lastName":"lastName3"}]
将 id 值从 int 转换为字符串然后保存文件的最佳方法是什么?
我试过:
echo "$(jq -r '[.[] | .id = .id|tostring]' test.json)" > test.json
但这似乎将每个条目放入一个字符串中并添加反斜杠
[
"{\"id\":1,\"firstName\":\"firstName1\",\"lastName\":\"lastName1\"}",
"{\"id\":2,\"firstName\":\"firstName2\",\"lastName\":\"lastName2\"}",
"{\"id\":3,\"firstName\":\"firstName3\",\"lastName\":\"lastName3\"}"
]
|
的优先级低于分配 (=
)。表达式 .id = .id | tostring
被解释为 (.id = .id) | tostring
.
分配确实改变了任何东西,可以删除。脚本变为 [ .[] | tostring ]
,解释输出(每个对象被序列化为 JSON 到一个字符串中)。
解决方案是使用括号强制执行所需的顺序。
命令是:
jq '[ .[] | .id = (.id | tostring) ]' test.json
不要使用进程扩展 ($(...)
) 来编写 echo
命令行。它效率低下且不需要。
将 jq
的输出直接重定向到文件。使用与输入文件不同的文件(否则最终会破坏您的数据)。
jq '[ .[] | .id = (.id | tostring) ]' test.json > output.json