summaryrefslogtreecommitdiff
path: root/extract-from-json.py
blob: e432b2b067f0642c1c4c34140e7c7229c1818bbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/python

import argparse
import json
import sys

def parse_args():
    parser = argparse.ArgumentParser(
        description="""Extracts information from a json file by navigating the JSON object using a
            sequence of property accessors and returning the JSON subtree, or the raw data, found
            at that location."""
    )

    parser.add_argument(
        '-f', '--file',
        metavar='<project.json>',
        help="Path to project.json file to parse",
        required=True,
    )

    parser.add_argument(
        'property',
        metavar='property_name',
        help="""Name of property to extract using object notation.
            Pass multiple values to drill down into nested objects (in order).""",
        nargs='*',
    )

    parser.add_argument(
        '-r', '--raw',
        help="""Dumps the raw object found at the requested location.
            If omitted, returns a JSON formatted object instead.""",
        action='store_true',
        default=False
    )

    return parser.parse_args()

def main():
    args = parse_args()

    with open(args.file) as json_file:
        selected_property = json.load(json_file)

    for prop in args.property:
        selected_property = selected_property[prop]

    if args.raw:
        print(selected_property)
    else:
        print(json.dumps(selected_property))

    return 0

if __name__ == "__main__":
    sys.exit(main())