基于CSV将JSON对添加到JSON文件

时间:2017-01-26 16:04:02

标签: json bash csv jq

我有一个csv,ids.csv,格式为:

plot(mtcars$mpg , mtcars$wt, xlab="mpg", ylab = "wt", pch = 19)
abline(lm(wt ~ mpg, mtcars))

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

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

我希望将csv中的名称与json文件的名称相匹配,并将id,name和slug添加到属性中,以便我得到:

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

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

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

      }
    }
  ]
}

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

1 个答案:

答案 0 :(得分:3)

从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