json - 如何从 jq 在 bash 中迭代 JSON 数组

标签 json bash jq wp-cli

背景

我希望能够将 json 文件传递​​给 WP CLI,以迭代创建帖子。

所以我想我可以创建一个 JSON 文件:

[
    {
        "post_type": "post",
        "post_title": "Test",
        "post_content": "[leaflet-map][leaflet-marker]",
        "post_status": "publish"
    },
    {
        "post_type": "post",
        "post_title": "Number 2",
        "post_content": "[leaflet-map fitbounds][leaflet-circle]",
        "post_status": "publish"
    }
]

并用 jq 迭代数组:

cat posts.json | jq --raw-output .[]

我希望能够迭代这些以执行类似的功能:

wp post create \
  --post_type=post \
  --post_title='Test Map' \
  --post_content='[leaflet-map] [leaflet-marker]' \
  --post_status='publish'

有什么方法可以用 jq 或类似的方法来做到这一点?

到目前为止我得到的最接近的是:

> for i in $(cat posts.json | jq -c .[]); do echo $i; done

但这似乎与字符串中的(有效)空格有关。输出:

{"post_type":"post","post_title":"Test","post_content":"[leaflet-map][leaflet-marker]","post_status":"publish"}
{"post_type":"post","post_title":"Number
2","post_content":"[leaflet-map
fitbounds][leaflet-circle]","post_status":"publish"}

这种方法是否可行?

最佳答案

使用 while 读取整行,而不是遍历命令替换产生的单词

while IFS= read -r obj; do
    ...
done < <(jq -c '.[]' posts.json)

关于json - 如何从 jq 在 bash 中迭代 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54952736/

相关文章:

json - 如何使用 jq 将多个 json 对象与分隔符逗号连接起来

json - 如何使用 jq 从 JSON 中获取键名

c++ - 使用 boost::property_tree::string_path 访问值

json - 如何自定义 'jq -C'使用的颜色?

bash 如果大于或等于错误

bash - 删除ubuntu终端目录中的n个最大文件

json - 如何使用 JQ 删除所有嵌套键

c# - 如何反序列化包含多维数组的json对象?

json - 从 BigQuery 列中提取 Json 值

json - 在不丢弃文档其余部分的情况下更改 JSON 列表中与条件匹配的条目