What are good CLI tools for JSON?

后端 未结 8 1240
难免孤独
难免孤独 2021-01-30 00:45

General Problem

Though I may be diagnosing the root cause of an event, determining how many users it affected, or distilling timing logs in order to assess the perform

8条回答
  •  无人共我
    2021-01-30 01:14

    I have created a module specifically designed for command-line JSON manipulation:

    https://github.com/ddopson/underscore-cli

    • FLEXIBLE - THE "swiss-army-knife" tool for processing JSON data - can be used as a simple pretty-printer, or as a full-powered Javascript command-line
    • POWERFUL - Exposes the full power and functionality of underscore.js (plus underscore.string)
    • SIMPLE - Makes it simple to write JS one-liners similar to using "perl -pe"
    • CHAINED - Multiple command invokations can be chained together to create a data processing pipeline
    • MULTI-FORMAT - Rich support for input / output formats - pretty-printing, strict JSON, etc [coming soon]
    • DOCUMENTED - Excellent command-line documentation with multiple examples for every command

    It allows you to do powerful things really easily:

    cat earthporn.json | underscore select '.data .title'
    # [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',
    #   'New town, Edinburgh, Scotland [4320 x 3240]',
    #   'Sunrise in Bryce Canyon, UT [1120x700] [OC]',
    # ...
    #   'Kariega Game Reserve, South Africa [3584x2688]',
    #   'Valle de la Luna, Chile [OS] [1024x683]',
    #   'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]
    
    cat earthporn.json | underscore select '.data .title' | underscore count
    # 25
    
    underscore map --data '[1, 2, 3, 4]' 'value+1'
    # prints: [ 2, 3, 4, 5 ]
    
    underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'
    # [ 4, 8 ]
    
    echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'
    # key = foo
    # key = bar
    
    underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name
    # [ 'moe', 'larry', 'curly' ]
    
    underscore keys --data '{name : "larry", age : 50}'
    # [ 'name', 'age' ]
    
    underscore reduce --data '[1, 2, 3, 4]' 'total+value'
    # 10
    

    It has a very nice command-line help system and is extremely flexible. It is well tested and ready for use; however, I'm still building out a few of the features like alternatives for input/output format, and merging in my template handling tool (see TODO.md). If you have any feature requests, comment on this post or add an issue in github. I've designed out a pretty extensive feature-set, but I'd be glad to prioritize features that are needed by members of the community.

提交回复
热议问题