Flatten nested JSON using jq

前端 未结 4 409
独厮守ぢ
独厮守ぢ 2021-02-04 09:58

I\'d like to flatten a nested json object, e.g. {\"a\":{\"b\":1}} to {\"a.b\":1} in order to digest it in solr.

I have 11 TB of json files whi

4条回答
  •  终归单人心
    2021-02-04 10:38

    You can also use the following jq command to flatten nested JSON objects in this manner:

    [leaf_paths as $path | {"key": $path | join("."), "value": getpath($path)}] | from_entries
    

    The way it works is: leaf_paths returns a stream of arrays which represent the paths on the given JSON document at which "leaf elements" appear, that is, elements which do not have child elements, such as numbers, strings and booleans. We pipe that stream into objects with key and value properties, where key contains the elements of the path array as a string joined by dots and value contains the element at that path. Finally, we put the entire thing in an array and run from_entries on it, which transforms an array of {key, value} objects into an object containing those key-value pairs.

提交回复
热议问题