

Show HN: A command-line utility-belt for hacking JSON and Javascript - RealCasually
https://github.com/ddopson/underscore-cli?ref=hn

======
keenerd
> Try doing THAT with any other CLI one-liner!

Challenge accepted.

    
    
        cat earthporn.json | \
        jshon -e data -e children -a -e data -e title -u | \
        sed -r 's/\<./\U&/g' | tr -d ' ' | sed 's/[^a-zA-Z].*//g`
    

I'll stick with Jshon for my routers and other little ARM devices.

But this utility is pretty nifty. Personally the whole select thing feels a
little too magic for my taste, but when it works it looks quite compact. I'll
probably be borrowing that colorizing feature tomorrow. And thanks for the
link at the bottom :-)

~~~
ralph
Nice to see tr getting some use, though given the sed on either side I wonder
if

    
    
        sed -r 's/\<./\U&/g; s/ +//g; s/[^a-zA-Z].*//'
    

would be better. Note, the last s/// doesn't need a g.

------
petercooper
What's the _?ref=hn_ in the URL about? I'm intrigued if there's some way to
track this sort of thing at GitHub. Or was it just to get around its two
previous posts? ;-) (Not that I can blame you for that, gotta keep trying.)

~~~
nivla
I might be wrong but I don't think you can access your Github repo's
analytics. The only reason I can think off other than the one you mentioned is
that if the link gets reposted to forums/blogs, he knows the source of it as
HN.

------
ddopson
Thanks! I put this tool together to tackle a bunch of common tasks I had -
groveling through large JSON responses from webservices, using templates to
generate documents based on structured config data, etc. I'm really happy that
other people are finding it useful too. If you have any feature requests, post
them!!!

------
yoduh
The author says: "Or it can form the backbone of a rich, full-powered
Javascript command-line, inspired by "perl -pe", and doing for structured data
what sed, awk, and grep do for text."

But... "structured data", at least in his examples (and nearly all the JSON I
see on the web), is... text. Does his perl script handle binary json?

The author says: "Try doing THAT with any other CLI one-liner!"

Indeed I will, since I do not know perl. Should I learn it?

The folllowing seems to work, but I only tested it on the author's
earthporn.json example

1\. compile CamelCase filter called yycamel

2\. compose throwaway sed oneliner to massage the text

3\. pipe through unicode to ascii filter (not included)

4\. pipe through yycamel

(I really do not like CamelCase, but whatever.)

    
    
       cat > camel.l << eof
       %%
       [ ][A-Za-z]  printf("%c",toupper(yytext[1]));
       eof
    
       flex -iCfa camel.l
       cc lex.yy.c -static -ll -o yycamel
    
       sed 's/\"title\": /\
       /g;' earthporn.json |sed 's/[[(]/\ 
       /g;' | sed '/^\"[a-zA-Z]/!d;s/[^a-zA-Z]/ /g;s/  */ /g' |yycamel

------
ville
This is not related to underscore.js anyhow? People might find that name
confusing.

~~~
johnleppings
Did you read the fucking article? The application began as a simple CLI for
executing JS, and had underscore as its standard library. So it was a CLI for
underscore. Then they made it JSON focused.

------
RealCasually
I found this _super_ useful:

cat data.json | underscore print --color

Gives you a well-formatted, color coded output for your JSON data. That is
just one of the many things it can do.

~~~
isaachawley
cat data.json | python -mjson.tool

Everything but the color.

~~~
antihero
cat data.json | json_reformat

Seeing as lots of systems have yajl.

------
foxwoods
To inspect JSON in command-line, I prefer jsontool[1], it's more intuitive.

    
    
        something-generating-JSON-on-stdout | json [OPTIONS] [LOOKUPS]
    

[1] <http://trentm.com/json/>

~~~
smagch
Yeah, I use jsontool too. I always do on the terminal

    
    
        cat hoge.json | json | less

------
ojiikun
Very nice! I've wanted something like this for as long as I've been a
RecordStream (<https://github.com/benbernard/RecordStream>) fanatic.

------
kanzure
Does anyone have a javascript deobfuscation tool that will autorename
variables in different scopes? I love working with javascript through the
shell, but js-beautify doesn't always cut it.

------
iopuy
The name of the tool is "underscore" in case you don't feel like clicking the
link.

~~~
RealCasually
Actually, its 'underscore_cli'.

~~~
iopuy
Actually, its "underscore-CLI".

~~~
RealCasually
Touche.

