Tweak python program to give result in json

Hi ,

Below is the script which prints result in json but when i validate it has some tab or extra space issues.

JSON result

{

    "data":[

    { "{#NAME}":"lilly-54b91f8-2
"}
,

    { "{#NAME}":"silly-54b91f8-2
"}
,

    { "{#NAME}":"milly-54b91f8-2
"}
,

    { "{#NAME}":"sollys-54b91f8-2
"}

    ]

}

This is the line I tweaked. Please advise.

  print "\t{",  "\"{#NAME}\":\""+container['Names'][0][1:]+hn+"\"}"
#!/usr/bin/env python
#
from docker import Client
from optparse import OptionParser
import json

class DockerService(object):

    def __init__(self, url):

        self.url = url
        self.docker_running = False

    def list_containers(self):

        docker_conn_list = Client(base_url=self.url)

        try:
            containerlist = docker_conn_list.containers()
            self.docker_running = True
        except Exception:
            self.docker_running = False

        if self.docker_running:
            return containerlist

def main():

    parser = OptionParser()
    parser.add_option('-u', '--url', default='unix://var/run/docker.sock',
                      help='URL for Docker service (Unix or TCP socket).')
    (opts, args) = parser.parse_args() 

    docker_service = DockerService(opts.url)
    containerslist = docker_service.list_containers()

    file = open('/tmp/hostname','r')
    hn = file.read()
   # print hn

    first = 1;
    print "{\n";
    print "\t\"data\":[\n";

    for container in containerslist:

        if first == 0:
            print ",\n"
        first = 0
        print "\t{",  "\"{#NAME}\":\""+container['Names'][0][1:]+hn+"\"}"



    print "\n\t]\n"
    print "}\n"

if __name__ == '__main__':
    main()    



hn.rstrip("\n\r") in order to lose the new line character

1 Like

Super it works as expected. Good day!