CSV to JSON using jq

前端 未结 5 425
刺人心
刺人心 2020-12-08 08:04

If you have a csv dataset like this:

name, age, gender
john, 20, male
jane, 30, female
bob, 25, male

Can you get to this:

[         


        
5条回答
  •  悲&欢浪女
    2020-12-08 08:43

    Here is a solution that assumes you run jq with -s and -R options.

    [
      [                                               
        split("\n")[]                  # transform csv input into array
      | split(", ")                    # where first element has key names
      | select(length==3)              # and other elements have values
      ]                                
      | {h:.[0], v:.[1:][]}            # {h:[keys], v:[values]}
      | [.h, (.v|map(tonumber?//.))]   # [ [keys], [values] ]
      | [ transpose[]                  # [ [key,value], [key,value], ... ]
          | {key:.[0], value:.[1]}     # [ {"key":key, "value":value}, ... ]
        ]
      | from_entries                   # { key:value, key:value, ... }
    ]
    

    Sample run:

    jq -s -R -f filter.jq data.csv
    

    Sample output

    [
      {
        "name": "john",
        "age": 20,
        "gender": "male"
      },
      {
        "name": "jane",
        "age": 30,
        "gender": "female"
      },
      {
        "name": "bob",
        "age": 25,
        "gender": "male"
      }
    ]
    

提交回复
热议问题