[HN Gopher] Jqjq: Jq Implementation of Jq
___________________________________________________________________
Jqjq: Jq Implementation of Jq
Author : petercooper
Score : 213 points
Date : 2022-11-25 12:15 UTC (10 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| ducktective wrote:
| Is it slower than the reference Jq written in C?
| oblio wrote:
| This is up there with the scariest piece of software in
| existence:
|
| https://github.com/xoreaxeaxeax/movfuscator
|
| Presentation of idea:
|
| https://m.youtube.com/watch?v=R7EEoWg6Ekk
| WastingMyTime89 wrote:
| Bootstrapping in itself is already a somewhat magical concept
| even when done in a serious way. I remember the first time I
| wrote a compiler quite distinctly. There is something special
| about building something that can build itself. I think it
| embodies the potential of programming in an absolutely unique
| way.
| computerfriend wrote:
| Based on _mov is Turing-complete_ by Stephen Dolan, also the
| author of jq. Small world.
| stingraycharles wrote:
| Is this just a coincidence or was the grandparent aware of
| this connection?
| andrewfromx wrote:
| very impressive. I like how github even says language: jq 100%.
| thriftwy wrote:
| I'm not sure why jq has its own language which is not js based.
|
| At least xmlstarlet has xslt for language.
| raverbashing wrote:
| Jq is ok, but the language is awfully unintuitive. It's also not
| very user-friendly. I've been using gojq with better success
| sph wrote:
| jq is not OK for that exact reason. It's like sendmail,
| dividing the world into people smart yet obtuse enough to sit
| and learn its idiosyncrasies, and regular people that go mad
| and claw their eyes out whenever they try.
|
| I tried, more than once, but I guess I'm not smart enough.
| howeyc wrote:
| I just use gron then grep for what I'm looking for.
| dtech wrote:
| Does it do more than just grep? That's awfully limited
| compared to what jq can do. I personally like jless for just
| searching and exploring.
| wwader wrote:
| gron is great, i have this in my init.jq file for fq
| (https://github.com/wader/fq). Sadly jq lacks a
| path_to_expr function so a bit harder to do it with that.
| def gron: ( path(..) as $p | getpath($p)
| | scalars | "\($p | path_to_expr) = \(tojson)"
| | println );
|
| Ex: $ fq gron <<< '{"a": [1,2,{"b": 3}]}'
| .a[0] = 1 .a[1] = 2 .a[2].b = 3
|
| Great for copy/paste into other expressions when poking
| around.
| xendo wrote:
| I've been using ,gron' with good results
| stevage wrote:
| Yeah, I like the design goals, I just found the solution was
| worse than the problem it was solving.
| pfarrell wrote:
| How is gojq different? Cursory look at the README and it seems
| like it implements the same language.
|
| My problem is the infrequency with which I need to use jq means
| I don't create a good learning feedback loop. The last time I
| used it though, I was able to walk down a decently complicated
| structure (indexed val in an array in a key in a hash in an
| array) and extract the data I wanted only having to google
| once. Like awk, though, I know there's a world of functionality
| I'm just not using.
| sitkack wrote:
| You should checkout gron, it is great at flattening fragments
| of json.
|
| https://github.com/tomnomnom/gron
| zikduruqe wrote:
| Anytime jq is mentioned, gron should be mentioned shortly
| thereafter. It is a wonderful tool.
| lathiat wrote:
| I have started using gron to understand the json structure
| to then write jq. Other times it does the job alone. It's
| great.
| pfarrell wrote:
| TIL. Thank you! I took a look and will definitely
| incorporate this in my work. Definitely a good idea.
| lapser wrote:
| It is indeed a reimplementation of jq in go, and the reason I
| use it over jq is many, one of which is that it produces more
| helpful error messages. In fact, I've moved jq to ojq
| (sometimes I want to check compatibility), and ln -fs gojq
| jq.
| vbezhenar wrote:
| I feel like it's OK if you use it often, but when you need it
| once a year, I'm spending too much time trying to figure it
| out.
|
| Some collection of typical problems and solutions would help I
| guess.
| delecti wrote:
| I use it a bunch to string together web APIs, and you're
| absolutely right. The longer I go relying on my library of
| pre-written strings of commands, the harder it is to write a
| new one. And you're right again with your second point,
| because that same library makes for great reference material
| for myself.
| Someone wrote:
| The manual (https://stedolan.github.io/jq/manual/) somewhat
| provides that. Quite a few sections have helpful examples,
| with links to the sandbox at jqplay.org.
|
| The IMO not so good parts of that page are
|
| - Quite a few section headers don't make sense to novices
|
| - I think the table of contents would be better if it had
| subheaders, ideally with one-line descriptions of the
| features (that probably would solve the issue above)
|
| - not every section has examples
|
| - some examples use fairly advanced features, making them
| harder to understand then necessary
| secondcoming wrote:
| I'll never be intelligent enough to use jq properly.
| AndyKluger wrote:
| I see folks have mentioned gron, and I also want to suggest:
|
| - jello (PyPI) - yamlpath (PyPI) - dasel
| zegl wrote:
| This is genius and horrifying at the same time, I love it!
| kenoph wrote:
| Impressive. Someone should do jq-jit too. I briefly looked into
| it and it seems like it would be _a lot_ of effort :/
| nusaru wrote:
| TIL GitHub highlights **Warning** in blockquote
| https://github.com/community/community/discussions/16925
| mabbo wrote:
| ... Can I use it to run jqjq?
| wwader wrote:
| Yes you can! but it's very slow $ ./jqjq
| "eval($(jq -Rs . jqjq.jq)+.)" <<< '"eval(\"def f: 1,8;
| [f,f] | map(.+105) | implode\")"' "jqjq"
|
| But running jqjq in jqjq in jqjq runs out of memory so don't
| know if that works yet :)
| deafpolygon wrote:
| SCP doesn't work?
| didip wrote:
| I have been using gojq, so all I have to do is scp the gojq
| binary.
| rodorgas wrote:
| How does this language implementations in the language itself
| works? Isn't it trivial to implement any feature, given it's
| already implemented? They use lower level features to implement
| higher level ones?
| NoThisIsMe wrote:
| Sure, you can implement the primitives by just passing through
| to the host runtime if you want, but you still have to parse
| the source and walk the AST first.
| lopatin wrote:
| At first I asked "why??" and then I remembered what site we're
| on. I need to start having fun with tech again.
| kmstout wrote:
| Aye, computation is a medium of expression.
| solardev wrote:
| You mean computation is a medium of computation
| olooney wrote:
| Has this happened to you? You're logged into a remote server and
| trying to read a config file or log file. The problem is its in a
| minified JSON format and looks like a solid wall of noise when
| you try to use `less`. You reach for your go-to JSON swiss army
| knife `jq` but it's not installed! You don't have root access to
| install it via `apt-get` so you need a script you can run
| locally. Just copy the `jqjq` and `jqjq.jq` files to your local
| directory, and now you can access the full power of jq just by
| running `./jqjq`. Problem solved! And the best part is that the
| only dependency is `jq`, which should be installed pretty much
| everywhere.
| cerved wrote:
| You can use cut, tr and sed
|
| https://stackoverflow.com/a/70614580/1507124
|
| it's not full pretty, rather just newline delimits arrays.
| Incidentally, it's much faster than jq. Probably wouldn't use
| it for anything serious
| ilyt wrote:
| Joking aside ssh badly-managed-server cat
| file | jq .
|
| Problem solved !
|
| I actually made a wrapper that just guesses (based on which
| parser returns error basically) type of serializing and then
| displays it nicely.
| eurasiantiger wrote:
| Thanks for this. The pattern is useful for much more and sure
| beats pushing ad-hoc 3rd-party-relinked binaries to
| production containers.
|
| Then again, why not scp the file to local? Bandwidth usage
| isn't good for the environment.
| rpadovani wrote:
| > And the best part is that the only dependency is `jq`, which
| should be installed pretty much everywhere.
|
| I am confused by this sentence. Wasn't the entire premise that
| js is NOT installed?
| omaranto wrote:
| You understood the joke, you just didn't find it funny.
| jjice wrote:
| I believe that that was the joke
| yjftsjthsd-h wrote:
| Bravo; I got most of the way through before catching the joke:)
| foob wrote:
| Jokes aside, this is a actually a pretty common scenario for
| some people, and I wrote a tool called Exodus to solve it [1].
| Exodus makes it trivial to relocate Linux binaries like _jq_
| from your local machine [1]. You can simply run
| exodus jq | ssh my-server
|
| locally, and then immediately have access to _jq_ on the
| server. I personally find it very useful when working with
| servers or containers that have limited package repositories or
| where I don 't have root access.
|
| [1] - https://github.com/intoli/exodus
| efrecon wrote:
| Ooh. Thank you for Exodus! It is fantastic!
| fwsgonzo wrote:
| That is very cool, and it's going to help me alot on old
| RHELs I think. Looks like it was actually very complicated to
| make!
| andai wrote:
| >Exodus handles bundling all of the binary's dependencies,
| compiling a statically linked wrapper for the executable that
| invokes the relocated linker directly, and installing the
| bundle in ~/.exodus/ on the remote machine.
|
| That's really neat.
| metadat wrote:
| Discussed 11 months ago:
|
| _Exodus - relocation of Linux binaries-and all of their
| deps-without containers_
|
| https://news.ycombinator.com/item?id=29446297
|
| (307 points, 65 comments)
| [deleted]
| blackhaz wrote:
| Just out of curiosity, why would anyone want to store a config
| file in a minified JSON format?
| yjftsjthsd-h wrote:
| Probably computer generated and defaulted to compact output.
| kasbah wrote:
| In all seriousness Python's json.tool is a great option here.
| cat big.json | python3 -m json.tool
|
| or python3 -m json.tool big.json
| jwilk wrote:
| There's also json_pp(1), provided by Perl.
| orf wrote:
| > Your scientists were so preoccupied with whether they could,
| they didn't stop to think if they should
| [deleted]
| [deleted]
___________________________________________________________________
(page generated 2022-11-25 23:00 UTC)