jsonjq

Using jq how can I replace the name of a key with something else


This should be easy enough... I want to rename a few keys (ideally with jq), whatever I do seems to error though. Here is a JSON example below:

$ cat fruitfile.json
[
  {
    "fruit": "strawberry",
    "veg": "apple",
    "worker": "gardener"
  }
]

I'd like to rename the veg key to fruit2 (or example, whatever is easiest) and also the worker key to job.

I realize this is possible in sed, but I'm trying to get to grips with jq.


Solution

  • Use the following jq approach:

    jq '[.[] | .["fruit2"] = .veg | .["job"] = .worker | del(.veg, .worker)]' file
    

    The output:

    [
      {
        "fruit": "strawberry",
        "fruit2": "apple",
        "job": "gardener"
      }
    ]