【问题标题】:Add JSON Pair to JSON File Based on CSV基于 CSV 将 JSON 对添加到 JSON 文件
【发布时间】:2017-06-12 04:14:37
【问题描述】:

我有一个 csv,ids.csv,格式如下:

id,name,slug
12345,Case A,case-a-12345
12824,Case B,case-b-12824

以及文件夹中与 csv 中的名称匹配的一堆 json 文件,例如 Case A.json,格式如下:

{
  "type": "mass"
  "features": [
  {
      "type": "sub",
      "properties": {
        "key1": "value1",
        "key2": "value2"
      }
    }
  ]
}

我想将 csv 中的名称与 json 文件的名称相匹配,并将 id、名称和 slug 添加到属性中,所以我得到了这个:

{
  "type": "mass"
  "features": [
  {
      "type": "sub",
      "properties": {
        "key1": "value1",
        "key2": "value2",
        "id": "12345",
        "name": "Case A",
        "slug": "case-a-12345

      }
    }
  ]
}

到目前为止,我只知道如何像这样使用 jq 添加值:

jq '.features[0].properties | .key3="value3"'

如何从 csv 中提取我的值,将其与正确的 json 文件匹配,并将其应用于我的所有 json 文件?

【问题讨论】:

  • 您问了很多问题,以后建议您尝试自己解决每个子任务,只询问您遇到的问题的具体问题。

标签: json bash csv jq


【解决方案1】:

从 CSV 文件中提取正确的字段后,您可以使用 += 运算符。我不建议为此使用 bash,但只要字段值中没有任何带引号的逗号,就可以使用简单的 while 循环。

{
    read   # Skip the header
    while IFS=, read -r id name slug; do
        jq --args id "$id" \
           --args name "$name" \
           --args slug "$slug" \
           'features[0].properties += {id: $id, name: $name, slug: $slug}' "$name.json" > tmp && mv tmp "$name.json"
    done
} < ids.csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多