SlideShare ist ein Scribd-Unternehmen logo
1 von 63
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기JeongHun Byeon
 
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...OpenStack Korea Community
 
카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29Taehoon Kim
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event LoopDesignveloper
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례if kakao
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Edureka!
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
Deploying & Scaling your Odoo Server
Deploying & Scaling your Odoo ServerDeploying & Scaling your Odoo Server
Deploying & Scaling your Odoo ServerOdoo
 
Clickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek VavrusaClickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek VavrusaValery Tkachenko
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례Hyung Lee
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJSBrainhub
 

Was ist angesagt? (20)

Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기
 
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
 
카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29
 
JS Event Loop
JS Event LoopJS Event Loop
JS Event Loop
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event Loop
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
 
Vagrant
VagrantVagrant
Vagrant
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
Deploying & Scaling your Odoo Server
Deploying & Scaling your Odoo ServerDeploying & Scaling your Odoo Server
Deploying & Scaling your Odoo Server
 
Clickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek VavrusaClickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek Vavrusa
 
Redis
RedisRedis
Redis
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
 

Ähnlich wie 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 CassandraEdward Capriolo
 
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"DataStax Academy
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformationLars Marius Garshol
 
Perkenalan ReasonML
Perkenalan ReasonMLPerkenalan ReasonML
Perkenalan ReasonMLRiza Fahmi
 
JavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersJavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersRick Beerendonk
 
Scala + WattzOn, sitting in a tree....
Scala + WattzOn, sitting in a tree....Scala + WattzOn, sitting in a tree....
Scala + WattzOn, sitting in a tree....Raffi Krikorian
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the ASTJarrod Overson
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?osfameron
 
Introduction to ReasonML
Introduction to ReasonMLIntroduction to ReasonML
Introduction to ReasonMLRiza Fahmi
 
Java Unicode with Cool GUI Examples
Java Unicode with Cool GUI ExamplesJava Unicode with Cool GUI Examples
Java Unicode with Cool GUI ExamplesOXUS 20
 
Java Unicode with Live GUI Examples
Java Unicode with Live GUI ExamplesJava Unicode with Live GUI Examples
Java Unicode with Live GUI ExamplesAbdul Rahman Sherzad
 
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 1Troy Miles
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation Amit Ghosh
 
Mongo db勉強会20110730
Mongo db勉強会20110730Mongo db勉強会20110730
Mongo db勉強会20110730Akihiro Okuno
 
Security Challenges in Node.js
Security Challenges in Node.jsSecurity Challenges in Node.js
Security Challenges in Node.jsWebsecurify
 
Mongo db mug_2012-02-07
Mongo db mug_2012-02-07Mongo db mug_2012-02-07
Mongo db mug_2012-02-07Will Button
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Capstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics ProgramCapstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics ProgramMoniSankarHazra
 
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
 
Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz1
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
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 Bangaloreamitlee9823
 
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...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 Standamitlee9823
 
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAl Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAroojKhan71
 
Halmar dropshipping via API with DroFx
Halmar  dropshipping  via API with DroFxHalmar  dropshipping  via API with DroFx
Halmar dropshipping via API with DroFxolyaivanovalion
 
CebaBaby dropshipping via API with DroFX.pptx
CebaBaby dropshipping via API with DroFX.pptxCebaBaby dropshipping via API with DroFX.pptx
CebaBaby dropshipping via API with DroFX.pptxolyaivanovalion
 
BDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort Service
BDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort ServiceBDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort Service
BDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort ServiceDelhi Call girls
 
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...SUHANI PANDEY
 
Generative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusGenerative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusTimothy Spann
 
➥🔝 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
 
FESE Capital Markets Fact Sheet 2024 Q1.pdf
FESE Capital Markets Fact Sheet 2024 Q1.pdfFESE Capital Markets Fact Sheet 2024 Q1.pdf
FESE Capital Markets Fact Sheet 2024 Q1.pdfMarinCaroMartnezBerg
 
Probability Grade 10 Third Quarter Lessons
Probability Grade 10 Third Quarter LessonsProbability Grade 10 Third Quarter Lessons
Probability Grade 10 Third Quarter LessonsJoseMangaJr1
 
Mature dropshipping via API with DroFx.pptx
Mature dropshipping via API with DroFx.pptxMature dropshipping via API with DroFx.pptx
Mature dropshipping via API with DroFx.pptxolyaivanovalion
 

Kürzlich hochgeladen (20)

Capstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics ProgramCapstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics Program
 
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...
 
Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signals
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
 
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
 
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
 
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
 
Call Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts Service
Call Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts ServiceCall Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts Service
Call Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts Service
 
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAl Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
 
Halmar dropshipping via API with DroFx
Halmar  dropshipping  via API with DroFxHalmar  dropshipping  via API with DroFx
Halmar dropshipping via API with DroFx
 
CebaBaby dropshipping via API with DroFX.pptx
CebaBaby dropshipping via API with DroFX.pptxCebaBaby dropshipping via API with DroFX.pptx
CebaBaby dropshipping via API with DroFX.pptx
 
BDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort Service
BDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort ServiceBDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort Service
BDSM⚡Call Girls in Mandawali Delhi >༒8448380779 Escort Service
 
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
 
Generative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusGenerative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and Milvus
 
Sampling (random) method and Non random.ppt
Sampling (random) method and Non random.pptSampling (random) method and Non random.ppt
Sampling (random) method and Non random.ppt
 
➥🔝 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...
 
FESE Capital Markets Fact Sheet 2024 Q1.pdf
FESE Capital Markets Fact Sheet 2024 Q1.pdfFESE Capital Markets Fact Sheet 2024 Q1.pdf
FESE Capital Markets Fact Sheet 2024 Q1.pdf
 
Probability Grade 10 Third Quarter Lessons
Probability Grade 10 Third Quarter LessonsProbability Grade 10 Third Quarter Lessons
Probability Grade 10 Third Quarter Lessons
 
Mature dropshipping via API with DroFx.pptx
Mature dropshipping via API with DroFx.pptxMature dropshipping via API with DroFx.pptx
Mature dropshipping via API with DroFx.pptx
 

jq: JSON - Like a Boss