SlideShare una empresa de Scribd logo
1 de 63
Descargar para leer sin conexión
Jan 31
11:30am - 1pm
West Tower Rm. 5-20
./jq{ JSON: Like a Boss }
By Bob Tiernay
{⋯}
{
[
{
{
{
HELLO!
I’m Bob
A web developer who frequently navigates very
large and deeply nested JSON documents.
I also ♥ jq :) Nested!
.....00001000448","projectCodes":[],"files":[],"metadata":{"d
atasetId":"EGAD00001000448","mappings":{"Analysis_Sample_meta
_info":[],"Sample_File":[{"SAMPLE_ALIAS":"BN03T","SAMPLE_ACCE
SSION":"EGAN00001085931","FILE_NAME":"111201_SN545_0167_AC05P
LACXX/BN03T_CGATGT_L003_R1_001.fastq.bz2.gpg","FILE_ACCESSION
":"EGAF00000193585"}sapiens","COMMON_NAME":"human"},"broker_n
ame":"EGA","alias":"BN03T","IDENTIFIERS":{"PRIMARY_ID":"ERS18
4758","SUBMITTER_ID":{"namespace":"NCCRI","content":"BN03T"}}
,"TITLE":"Hep,"accession":"ERS184758","SAMPLE_ATTRIBUTES":{"S
AMPLE_ATTRIBUTE":[{"TAG":"gender","VALUE":"male"},{"TAG":"ENA
-SUBMISSION-TOOL","VALUE":"SRA-Webin"}]}}}}},"experiments":{"
EGAX00001103159":{"EXPERIMENT_SET":{"EXPERIMENT":{"PLATFORM":
{"ILLUMINA":{"INSTRUMENT_MODEL":"Illumina HiSeq
2000"}},"DESIGN":{"DESIGN_DESCRIPTION":{},"SPOT_DESCRIPTOR":{
"SPOT_DECODE_SPEC":{"READ":[{"READ_CLASS":"Application
0f0e2da588f55845c0d9d78d331"}]}},"broker_name":"EGA","alias":
"ena-RUN-NCCRI-29-05-2013-08:52:43:023-74","RUN_ATTRIBUTES":{
"RUN_ATTRIBUTE":{"TAG":"ENA-SUBMISSION-TOOL","VALUE":"SRA-Web
in"}},"IDENTIFIERS":{"PRIMARY_ID":"ERR280119","SUBMITTER_ID":
{"namespace":"NCCRI","content":"ena-RUN-NCCRI-29.....
MOTIVATION
You ask:
“How can I
get this?!?!”
You just
queried a new
REST API….
… a wall of
text descends
upon you ...
...Hundreds of lines this way
Thousands of lines that way...
Say hello to my
little friend:
./jq
jqHi!
THE FAMILY
▸ jq → {JSON}
▸ xmlstarlet → <XML/>
▸ pup → <HTML>
▸ yq → YAML:
{⋯}
Siblings
Cousins: sed, awk, grep
“jq is a lightweight and flexible
command-line JSON processor
▸ Written in C
▸ No runtime dependencies
▸ Functional programming language
▸ Turing complete
▸ Terse and expressive
▸ Slice, filter, map and transform data with
ease
Much more powerful than Json Path!
Brainf*ck proof!
— Stephen Dolan
SOME
USECASES
▸ Exploring JSON APIs
▹ Elasticsearch
▹ GitHub
▹ Docker
▸ Exploring JSONL dumps
▸ Lightweight integration
▸ One-off mini-ETLs
▸ Analytics / aggregations
* Also, just a darn handy JSON formatter!
https://stedolan.github.io/jq/
▸ Homepage
▸ Installation instructions
▸ Documentation and resources
Links:
https://jqplay.org/
▸ Interactive jq playground
▸ Great for learning
▸ Share snippets #jq channel on
Freenode
jq tag on
Stackoverflow
PLATFORMS
▸ Linux
▸ OSX
▸ FreeBSD
▸ Solaris
▸ Windows
brew install jq
Mac
apt-get install jq
Linux
jq
jq INVOCATION1
Inline Input
▸ Read from stdin
▸ Write to stdout
stdin ➜ jq <filter> ➜ stdout
File Input
▸ Read from file
▸ Write to stdout
Most common
curl -s ⋯ | jq ⋯ jq ⋯ file.json
echo ⋯ | jq ⋯
cat ⋯ | jq ⋯
I/O
jq <filter> file ➜ stdout
Try httpie instead!
> jq --help
jq - commandline JSON processor [version 1.5]
Usage: jq [options] <jq filter> [file...]
jq is a tool for processing JSON inputs [...]
Some of the options include:
-c compact instead of pretty-printed output;
-n use `null` as the single input value;
-e set the exit status code based on the output;
-s read (slurp) all inputs into an array; apply
-r output raw strings, not JSON texts;
-R read raw strings, not JSON texts;
-C colorize JSON;
-M monochrome (don't colorize JSON);
-S sort keys of objects on output;
--tab use tabs for indentation;
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
--slurpfile a f set variable $a to an array of JSON texts read from <f>;
jq INVOCATION2
⋮
⋮
➜ jq ➜ ➜ jq -s ➜
Line by Line “Slurp Mode”
The default
--slurp / -s
Reads as a single array!Read line by line
Input: Output: Input: Output:
Modes
KEY IDEA
FILTERS:
jq <filter>
BASIC FILTERS1
jq .
> echo ‘{“x”:1,“y”:2}’ | jq .
{
“x”: 1,
“y”: 2
}
Identity filter
Very useful for pretty
printing / colourizing input!
BASIC FILTERS2
jq .property
> echo ‘{“x”:1,“y”:2}’ | jq .x
1
Projection
Removes outer object
BASIC FILTERS3
jq .property?
PRO-TIP
▸ Just like .property but does not output an
error when “.” is not an array or an object.
BASIC FILTERS3
jq .nested.property
> echo ‘{“x”:{“y”:“z”}}’ | jq .x.y
“z”
Nested projection
Removes both parents
BASIC FILTERS4
jq .[]
> echo ‘[{“x”:1},{“x”:2}]’ | jq .[]
{
"x": 1
}
{
"x": 2
}
Flatmap
Removes the outer array
KEY IDEA
OPERATORS:
jq f1
<op> f2
BASIC OPERATORS1
jq filter1
| filter2
> echo ‘{“x”:{“y”:“z”}}’ | jq ‘.x | .y’
Pipe
Result of pipelining. Can be
done many, many times!
“z”
BASIC OPERATORS2
jq filter1
, filter2
> echo ‘{“x”:1}’ | jq ‘. , .’
Tee
{
"x": 1
}
{
"x": 1
}
One record becomes two
BASIC OPERATORS2
jq (expressions)
> echo ‘{“x”:1}’ | jq ‘. , (. | .x)’
Grouping
{
"x": 1
}
1
Useful for complex sub-processing
BASIC OPERATORS3
jq . + 2
Addition
➜ [4, 6, 8, 10]
jq . - 2
Subtraction
➜ [0, 2, 4, 8]
jq . * 2
Multiplication
➜ [4, 8, 12, 16]
jq . / 2
Division
➜
jq . % 2
Modulus
➜ [0, 0, 0, 0]
> echo 
[2,4,6,8] |
[1, 2, 3, 4]
KEY IDEA
CONSTRUCTORS:
jq <⋯>
CONSRUCTORS1
jq [⋯]
> echo ‘{“x”:1}’ | jq ‘[.]’
Array Constructor
[
{
“x”: 1
}
]
Puts each record into an array
CONSRUCTORS2
jq {⋯}
> echo ‘1’ | jq ‘{“x”:.}’
Object Constructor
{
“x”: 1
}
Creates a new object
$ VARIABLES
Ok, ok, “bindings” for the language theorists
VARIABLES$
▸ Usually not needed
▸ Can help to cut down on noise or
repetition
▸ Must start with a $
▸ Scoped over the expression that
defines them
$
expression as $x
Variable definition
VARIABLES$
▸ Can use multiple declarations via
“Destructuring”
$
. as {a: $x, b: [$y, $z]}
Variable definitions
FUNCTIONS
length,
in, map(x), map
del(path_expression), g
VALUE), to_entries, from_entrie
select(boolean_expression), arrays, obj
booleans, numbers, normals, finites, strings, n
values, scalars, empty, error(message), paths,
paths(node_filter), leaf_paths, add, any, any(con
any(generator; condition), all, all(condition),
all(generator; condition), flatten, flatten(dept
range(upto), range(from;upto) range(from;upto;b
sqrt, tonumber, tostring, type, infinite, nan,
isinfinite, isnan, isfinite, isnormal, sort,
sort_by(path_expression), group_by(path_expre
max, min_by(path_exp), max_by(path_exp), uniq
unique_by(path_exp), reverse, contains(eleme
indices(s), index(s), rindex(s), inside, st
with(str), combinations, combinations(n
), rtrimstr(str), explode, imp
), ascii_downcase, asc
ond; next), r
rse_
f(x)
FUNCTIONS: DEFINITIONS
▸ Unit of reuse and encapsulation
▸ Introduced with the def keyword
▸ Can take arguments
▸ . is an implicit arg!
def name[(args)]: body;
Function definition:
def increment: . + 1; def map(f): [.[] | f];
Examples:
Optional!
f(x)
FUNCTIONS: ARRAY BUILTINS
[⋯]
➜ 4
> echo 
[2,4,6,8] |
jq length
➜ [3]jq indices(8)
➜ truejq contains([2])
➜ [8,6,4,2]jq reverse
➜ 2jq min
➜ 8jq max
Input:
FUNCTIONS: STRING BUILTINS
➜ [“He”,“”,“o”]
> echo 
‘“Hello!”’|
jq split(“l”)
➜ truejq test(“He.*”)
➜ 6jq length
➜ truejq contains(“!”)
➜ falsejq startswith(“!”)
➜ “hello!”jq ascii_downcase
Input:
“⋯”
FUNCTIONS: OBJECT BUILTINS
➜ [“a”,“b”,“c”]
> echo 
‘{ 
“a”:1, 
“b”:2, 
“c”:3 
}’ |
jq keys
➜ truejq has(“a”)
➜ {"b":2,"c":3}jq del(“a”)
➜ 6jq add
➜
[{“key”:”a”,
“Value”:”1}, ...]
jq to_entries
➜ [1,2,3]jq flatten
Input:
{⋯}
FUNCTIONS: SELECT
> echo 
‘{“x”:1}’ 
‘{“x”:2}’ 
‘{“x”:3}’ 
‘{“x”:4}’ |
Input:
{“x”: 3}
{“x”: 4}
Output:
jq select(. > 2)
Expression:
select(boolean_expresion)
Only pass through values
that match the boolean
expression
FUNCTIONS: PATHS
> echo  ‘{
"a":{
"b":{
"c":1,
"d":2
}
}
}’ |
Input:
[“a”]
[“a”,“b”]
[“a”,“b”,“c”]
[“a”,“b”,“d”]
Output:
jq paths(scalars)
Expression:
paths(node_filter)
Only give leaf paths
FUNCTIONS: RECURSE
> echo  ‘{
"a":{
"b":{
"c":1,
"d":2
}
}
}’ |
Input:
{"a":{"b":{"c":1,"d":2}}}
{"b":{"c":1,"d":2}}
{"c":1,"d":2}
1
2
Output:
jq recurse
Expression:
recurse(f;condition)
Recursively emit
all sub-values
jq ..
- Or -
FUNCTIONS: GROUP_BY
> echo  ‘[
{"x":1, "y":1},
{"x":1, "y":2},
{"x":2, "y":1},
{"x":2, "y":2}
]’ |
Input:
[
[
{"x":1,"y":1},
{"x":1,"y":2}],
[
{"x":2,"y":1},
{"x":2,"y":2}
]
]
Output:
jq group_by(.x)
Expression:
group_by(path_expression)
Groups by path
expression.
Requires array
as input.
MODULES
Each sold separately
MODULES
▸ Break larger scripts into files
▸ Reuse functions across sessions, modules, etc.
▸ Searches "~/.jq", "$ORIGIN/../lib", ... for *.jq files
import MyModule as MY_MODULE;
Relative path string. Could be at ~/.jq/MyModule.jq
. | MY_MODULE::my_function
Imported prefix
...
ESCAPE
@text Just calls tostring
@json Serializes input as JSON
@html Applies HTML/XML escaping
@uri Applies percent encoding
@csv Rendered as CSV with double quotes
@tsv Rendered as TSV (tab-separated values)
@sh Escaped suitable for use in a POSIX shell
@base64 Converted to base64 as specified by RFC 4648
@⋯ | jq @name
Apply formatter
a.k.a String Sauce
ESCAPE
@csv
Example: Format Output as CSV
> echo [1,2,3,4] | jq @csv
"1","2","3","4"
Input: Expression:
Output in
CSV format:
STUFF
OTHER
▸ Dates
▸ Control flow
▸ Assignment
▸ Generators
▸ Parsers
▸ Streaming
▸ I/O
(that I don’t have time for) if, while,
--stream,
input,
|=,
etc.
LIKE
A
BOSS
Tips and tricks
from the field
Boss
./jq
MISSION:
Create a TCGA barcode-to-UUID
mapping in TSV format.
“ ”
{{{⋯}}}
⬇
⋯t⋯
{"data": {"hits": [{"case_id": "eb7c3b35-7a5e-4621-b31f-9775c51f9a23", "samples":
[{"sample_id": "f57d3d51-3754-44b7-88f9-b5b1eaa534c5", "portions": [{"analytes":
[{"aliquots": [{"aliquot_id": "48be744a-1f5d-4e70-9bb2-c30a131d8679", "submitter_id":
"TCGA-61-2098-11A-01W-0721-10"}, {"aliquot_id": "5a568ebf-3329-4d21-be35-e7578c526c30",
"submitter_id": "TCGA-61-2098-11A-01W-0725-09"}, {"aliquot_id":
"7c7d78f2-df0f-4a03-9e42-cf83f20949ae", "submitter_id": "TCGA-61-2098-11A-01W-1217-08"},
{"aliquot_id": "65621d9f-8a77-4643-9b82-5b3d01f19ca6", "submitter_id":
"TCGA-61-2098-11A-01W-0723-08"}]}, {"aliquots": [{"aliquot_id":
"de14acff-b622-48c1-94c7-4105a3a6fa92", "submitter_id": "TCGA-61-2098-11A-01D-0664-04"},
{"aliquot_id": "5cb6df63-9901-483a-8a0b-7a67c49caab3", "submitter_id":
"TCGA-61-2098-11A-01D-0665-06"}, {"aliquot_id": "220f1a3b-49f1-4686-b2a9-0d6087262998",
"submitter_id": "TCGA-61-2098-01A-01D-0665-06"}, {"aliquot_id":
"89f4b51d-2c3d-4a66-8580-cb1edb8bb072", "submitter_id": "TCGA-61-2098-01A-01D-0663-01"},
{"aliquot_id": "8b8a5622-5638-4d0e-b034-64739cfc678b", "submitter_id":
"TCGA-61-2098-01A-01D-0667-05"}]}]}, {"analytes": []}], "submitter_id": "TCGA-61-2098-01A"}],
"submitter_id": "TCGA-61-2098"}], "pagination": {"count": 1, "sort": "", "from": 1, "page": 1,
"total": 17177, "pages": 17177, "size": 1}}, "warnings": {}}
curl -s 'https://gdc-api.nci.nih.gov/legacy/cases?...
INPUT: {{{⋯}}}
⬇
⋯t⋯
{
"data": {
"hits": [
{
"case_id": "eb7c3b35-7a5e-4621-b31f-9775c51f9a23",
"samples": [
{
"sample_id": "f57d3d51-3754-44b7-88f9-b5b1eaa534c5",
"portions": [
{
"analytes": [
{
"aliquots": [
{
"aliquot_id": "48be744a-1f5d-4e70-9bb2-c30a131d8679",
"submitter_id": "TCGA-61-2098-11A-01W-0721-10" ...
FORMAT: {{{⋯}}}
⬇
⋯t⋯⋯ | jq .
PRO-TIP
curl ⋯ | jq -C . | less -R
⬇
This JSON is too big for my console!
Colorize Interpret colors
data
data/hits
data/hits/0
data/hits/0/case_id
data/hits/0/samples
data/hits/0/samples/0
data/hits/0/samples/0/sample_id
data/hits/0/samples/0/portions
data/hits/0/samples/0/portions/0
data/hits/0/samples/0/portions/0/analytes
data/hits/0/samples/0/portions/0/analytes/0 ...
jq -r 'path(..) | map(tostring) | join("/")'
BOSS IDEA:
INSTANT SCHEMA
{{{⋯}}}
⬇
⋯t⋯
jq -r '.data.hits[] |
[.case_id, .submitter_id],
(.samples[]? | [.sample_id, .submitter_id]),
(.samples[]?.portions[]?.analytes[]?.aliquots[]
| [.aliquot_id, .submitter_id]) | @tsv'
eb7c3b35-7a5e-4621-b31f-9775c51f9a23 TCGA-61-2098
f57d3d51-3754-44b7-88f9-b5b1eaa534c5 TCGA-61-2098-11A
60b275ef-91db-4572-a187-74fea2507bb8 TCGA-61-2098-01A
48be744a-1f5d-4e70-9bb2-c30a131d8679 TCGA-61-2098-11A-01W-0721-10
5a568ebf-3329-4d21-be35-e7578c526c30 TCGA-61-2098-11A-01W-0725-09
7c7d78f2-df0f-4a03-9e42-cf83f20949ae TCGA-61-2098-11A-01W-1217-08
65621d9f-8a77-4643-9b82-5b3d01f19ca6 TCGA-61-2098-11A-01W-0723-08
de14acff-b622-48c1-94c7-4105a3a6fa92 TCGA-61-2098-11A-01D-0664-04
5cb6df63-9901-483a-8a0b-7a67c49caab3 TCGA-61-2098-11A-01D-0665-06 ...
{{{⋯}}}
⬇
⋯t⋯
TRANSFORM:
PRO-TIP
echo 'def schema: path(..) | map(tostring) | join("/");' >> ~/.jq
curl ⋯ | jq schema
⬇
GOT CHA!Just don’t do this stuff!
[ }
“Oh...”
“No!”
1, 2, 3
}
[
GOTCHA: Shell Quoting
>jq ⋯|⋯|⋯|⋯
Shell interprets these as pipes!
⬇
>jq ‘⋯|⋯|⋯|⋯’
Add single quotes FTW!
PROBLEM:
SOLUTION:
Prefer single
over double
GOTCHA: Property vs Call
>jq ‘x.y’
Expects x to be function!
⬇
>jq ‘.x.y’
Add a dot in front to access property
PROBLEM:
SOLUTION:
jq: error: x/0 is not defined
at <top-level>, line 1:
GOTCHA: Property w/ ‘-’
>jq ‘.file-id’
Thinks ‘-’ is subtraction!
⬇
>jq ‘.[“file-id”]’
Need to use array-style access
PROBLEM:
SOLUTION:
jq: error: id/0 is not defined
at <top-level>, line 1:
GOTCHA: Recurse
>jq ‘..a’
Won’t work!
⬇
>jq ‘.. | a’
Add a pipe instead
PROBLEM:
SOLUTION:
jq: error: syntax error, unexpected
IDENT, expecting $end (Unix shell
quoting issues?) at <top-level>,
line 1:
... THERE’S MORE!
BUT WAIT...
BEYOND
THE
BOX
Agast
Java: jq-jacksonJava: jq-jackson
https://github.com/eiiches/jackson-jq
val query = JsonQuery.compile(".name|repeat(3)");
val record = mapper.readTree("{"name":"a"}");
List<JsonNode> result = query.apply(scope, record);
▸ 100% Java
▸ Embeddable
▸ Works with Jackson’s JsonNode
▸ Code functions in Java
Node: node-jqNode: node-jqhttps://github.com/sanack/node-jq
import { run } from 'node-jq'
const filter = '. | map(select(.foo > 10))'
const jsonPath = '/path/to/json'
const options = {}
run(filter, jsonPath, options).then(console.log)
▸ npm module
▸ jq wrapper (not native js)
▸ Goal was to make jq syntax
available in Atom with atom-jq.
Atom: atom-jqAtom: atom-jqhttps://github.com/sanack/atom-jq
▸ atom module
▸ Run jq inside Atom!
OTHEROTHER
▸ jq-go
▸ jq-shell
▸ jr, jqr, rbq
▸ jq-r
▸ lq
▸ jq-hopkok
▸ jq-cookbook
Scala jq parser
jq like
Lua
R
Ruby
UI
jq package manager
jq HTTP server
Go
jq based shell
Print filters
▸ jq-httpd
▸ jq-parser
▸ jqnpm
▸ jqui
▸ show-struct
LANGUAGE
TOOLS
SNIPPETS
▸ jq.node
ALTERNATIVES
THANKS!
Any questions?
?
JSON File
By Oliviu Stoian, RO
Family
By Abhiraami Thangavel, IN
Web API
By Ian Kirkland, US
Filter
By Alex Koev, BG
Calculator
By Creative Stall, PK
Carpenter
By Gan Khoon Lay
Modules
By mikicon, CZ
Presentation
By Creative Stall, PK
Explosion
By Aldric Rodríguez
Gift
By Chanut is Industries, TH
Surprised
By Gregor Črešnar
The Noun Project
Images by:
©CREDITS

Más contenido relacionado

La actualidad más candente

Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
Fadel Chafai
 
26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup
26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup
26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup
Timothy Spann
 

La actualidad más candente (20)

왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup
26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup
26Oct2023_Adding Generative AI to Real-Time Streaming Pipelines_ NYC Meetup
 
Express JS
Express JSExpress JS
Express JS
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
 
Ansible - Hands on Training
Ansible - Hands on TrainingAnsible - Hands on Training
Ansible - Hands on Training
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
 
MongoDB and Node.js
MongoDB and Node.jsMongoDB and Node.js
MongoDB and Node.js
 
Nuxt.JS Introdruction
Nuxt.JS IntrodructionNuxt.JS Introdruction
Nuxt.JS Introdruction
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with Ansible
 
Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructured
 
State manager in Vue.js, from zero to Vuex
State manager in Vue.js, from zero to VuexState manager in Vue.js, from zero to Vuex
State manager in Vue.js, from zero to Vuex
 
Terraform
TerraformTerraform
Terraform
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
 

Similar a jq: JSON - Like a Boss

Intravert Server side processing for Cassandra
Intravert Server side processing for CassandraIntravert Server side processing for Cassandra
Intravert Server side processing for Cassandra
Edward Capriolo
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
Dmitry Buzdin
 
Mongo db勉強会20110730
Mongo db勉強会20110730Mongo db勉強会20110730
Mongo db勉強会20110730
Akihiro Okuno
 

Similar a jq: JSON - Like a Boss (20)

Intravert Server side processing for Cassandra
Intravert Server side processing for CassandraIntravert Server side processing for Cassandra
Intravert Server side processing for Cassandra
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
 
Couchdb
CouchdbCouchdb
Couchdb
 
Latinoware
LatinowareLatinoware
Latinoware
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformation
 
Perkenalan ReasonML
Perkenalan ReasonMLPerkenalan ReasonML
Perkenalan ReasonML
 
JavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersJavaScript 2016 for C# Developers
JavaScript 2016 for C# Developers
 
Scala + WattzOn, sitting in a tree....
Scala + WattzOn, sitting in a tree....Scala + WattzOn, sitting in a tree....
Scala + WattzOn, sitting in a tree....
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?
 
Introduction to ReasonML
Introduction to ReasonMLIntroduction to ReasonML
Introduction to ReasonML
 
Java Unicode with Cool GUI Examples
Java Unicode with Cool GUI ExamplesJava Unicode with Cool GUI Examples
Java Unicode with Cool GUI Examples
 
Java Unicode with Live GUI Examples
Java Unicode with Live GUI ExamplesJava Unicode with Live GUI Examples
Java Unicode with Live GUI Examples
 
ES6 is Nigh
ES6 is NighES6 is Nigh
ES6 is Nigh
 
Game Design and Development Workshop Day 1
Game Design and Development Workshop Day 1Game Design and Development Workshop Day 1
Game Design and Development Workshop Day 1
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
 
Mongo db勉強会20110730
Mongo db勉強会20110730Mongo db勉強会20110730
Mongo db勉強会20110730
 
Security Challenges in Node.js
Security Challenges in Node.jsSecurity Challenges in Node.js
Security Challenges in Node.js
 
Mongo db mug_2012-02-07
Mongo db mug_2012-02-07Mongo db mug_2012-02-07
Mongo db mug_2012-02-07
 

Último

Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
amitlee9823
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
amitlee9823
 
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
amitlee9823
 
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
amitlee9823
 
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
amitlee9823
 
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night StandCall Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
amitlee9823
 
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
only4webmaster01
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
ZurliaSoop
 
➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men 🔝Ongole🔝 Escorts S...
➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men  🔝Ongole🔝   Escorts S...➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men  🔝Ongole🔝   Escorts S...
➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men 🔝Ongole🔝 Escorts S...
amitlee9823
 
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
gajnagarg
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
amitlee9823
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
amitlee9823
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
gajnagarg
 

Último (20)

Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
 
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
 
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
 
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
 
Discover Why Less is More in B2B Research
Discover Why Less is More in B2B ResearchDiscover Why Less is More in B2B Research
Discover Why Less is More in B2B Research
 
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night StandCall Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
 
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
 
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
 
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
 
Digital Advertising Lecture for Advanced Digital & Social Media Strategy at U...
Digital Advertising Lecture for Advanced Digital & Social Media Strategy at U...Digital Advertising Lecture for Advanced Digital & Social Media Strategy at U...
Digital Advertising Lecture for Advanced Digital & Social Media Strategy at U...
 
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men 🔝Ongole🔝 Escorts S...
➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men  🔝Ongole🔝   Escorts S...➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men  🔝Ongole🔝   Escorts S...
➥🔝 7737669865 🔝▻ Ongole Call-girls in Women Seeking Men 🔝Ongole🔝 Escorts S...
 
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
 

jq: JSON - Like a Boss