Use sed and awk to prettify json

$ cat prettify.sed 
s/,/,\r\n/g
s/\[/\r\n\[\r\n/g
s/\]/\r\n\]\r\n/g
s/{/\r\n{\r\n/g
s/}/\r\n}\r\n/g

 

$ cat prettify.awk 
BEGIN{  depth = 0;}
/\[/ {  
        sp = 0;
        while(sp++ < depth)
            printf("    "); 
        print $0;
        
        depth += 1;
     }

/{/  { 
        sp = 0;
        while(sp++ < depth)
            printf("    "); 
        print $0;
        
        depth += 1;
     }

/\]/ { 
        if (depth > 1) 
            depth -= 1;
            
        sp = 0;
        while(sp++ < depth)
            printf("    "); 
        print $0;
     }

/}/  { 
        if (depth > 1) 
            depth -= 1;
        
        sp = 0;
        while(sp++ < depth)
            printf("    "); 
        print $0;
     }

/".*":".*"/ {sp = 0;while(sp++ < depth)printf("    "); print $0;}

 

$ cat digitalstrategy.json | sed -f prettify.sed | awk -f prettify.awk | head -50
{
    "agency":"NSF",
    "generated":"2014-08-07 06:38:36",
    [
        {
            "id":"2.1",
            "due":"90 Days",
            "due_date":"2012\/08\/21",
            [
                {
                    "type":"select",
                    "name":"2-1-status",
                    "label":"Overall Status",
                    [
                        {
                            "label":"Not Started",
                            "value":"not-started"
                        }
                        {
                            "label":"In Progress",
                            "value":"in-progress"
                        }
                        {
                            "label":"Completed",
                            "value":"completed"
                        }
                    ]
                    "value":"completed"
                }
            ]
        }
        {
            "id":"2.1.1",
            "parent":"2.1",
            "text":"Paragraph on customer engagement approach",
            "due":"90 days",
            "due_date":"2012\/08\/21",
            [
                {
                    "type":"textarea",
                    "name":"2-1-1-customer-engagement-approach",
                    "label":"Paragraph on customer engagement approach",
                    [
                    ]
                }
            ]
        }
        {
            "id":"2.1.2",
            "parent":"2.1",

 


 

$ cat prettify.awk 
BEGIN{  depth = 0;}
/\[/ {  
#        sp = 0;
#        while(sp++ < depth)
#            printf("    "); 
#        print $0;
        
        depth += 1;
     }

/{/  { 
#        sp = 0;
#        while(sp++ < depth)
#            printf("    "); 
#        print $0;
        
        depth += 1;
     }

/\]/ { 
        if (depth > 1) 
            depth -= 1;
            
#        sp = 0;
#        while(sp++ < depth)
#            printf("    "); 
#        print $0;
     }

/}/  { 
        if (depth > 1) 
            depth -= 1;
        
#        sp = 0;
#        while(sp++ < depth)
#            printf("    "); 
#        print $0;
     }

{sp = 0;while(sp++ < depth)printf("    "); print $0;}

 

posted @ 2014-10-01 21:25  Daniel King  阅读(542)  评论(0编辑  收藏  举报