Scrollbar in Vega-Lite for Gantt-Chart - Data Studio - google-data-studio
I'm using Vega-Lite for Data Studio and I've created an interactive Gantt-Chart
Like in the image below :
[gantt-chart sample] https://i.stack.imgur.com/xZ4RA.png
However, I have a lot of data and my chart is limited by fixed height and width. Like this :
[gantt-chart-lots-of-data] https://i.stack.imgur.com/2fFhQ.png
So my question is, how can I add a vertical scrollbar ? Or do I have the possibility to zoom-in/out on y-axis ?
I've already setup the possibility to interact with data (drag, zoom-in/out) by using "selection interval" parameter. I would like to do the same with "tasks" (see example below)
For the example, I've fixed the height to illustrate the fact that my data are tightly packed together.
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "Gantt Chart.",
"background" : "#fbfbfb",
"height" : 80,
"data": {
"values": [
{"task": "A", "start": "2021-01-01", "end": "2021-05-01", "landing": "2021-04-01", "metric" : 1},
{"task": "B", "start": "2021-03-01", "end": "2021-08-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "C", "start": "2021-05-01", "end": "2021-07-01", "landing": "2021-04-01", "metric" : 0.7},
{"task": "D", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.3},
{"task": "E", "start": "2021-07-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.2},
{"task": "F", "start": "2021-08-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.1},
{"task": "G", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "H", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "I", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.8},
{"task": "J", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.9},
{"task": "K", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 1},
{"task": "L", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.4},
{"task": "M", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.3},
{"task": "N", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.2},
{"task": "O", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "P", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 1},
{"task": "Q", "start": "2021-01-01", "end": "2021-05-01", "landing": "2021-04-01", "metric" : 1},
{"task": "R", "start": "2021-03-01", "end": "2021-08-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "S", "start": "2021-05-01", "end": "2021-07-01", "landing": "2021-04-01", "metric" : 0.7},
{"task": "T", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.3},
{"task": "U", "start": "2021-07-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.2},
{"task": "V", "start": "2021-08-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.1},
{"task": "W", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "X", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "Y", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.8},
{"task": "Z", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.9},
{"task": "ZA", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 1},
{"task": "ZB", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.4},
{"task": "ZC", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.3},
{"task": "ZD", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.2},
{"task": "ZE", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "ZF", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 1}
]
},
"layer": [
{
"mark": {"type": "bar", "tooltip": true},
"encoding": {
"y": {
"title":"task",
"field": "task",
"type": "nominal"
},
"x": {
"timeUnit": "yearmonthdate",
"field": "start",
"type" : "temporal",
"axis": {
"tickCount": 12,
"labelAlign": "left",
"labelExpr": "[timeFormat(datum.value, '%d %b'), timeFormat(datum.value, '%m') == '01' ? timeFormat(datum.value, '%Y') : '']",
"labelOffset": 4,
"labelPadding": -24,
"tickSize": 30,
"gridDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
},
"tickDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
}
}
},
"x2": {
"timeUnit": "yearmonthdate",
"field": "end",
"type" : "temporal",
"axis": {
"tickCount": 12,
"labelAlign": "left",
"labelExpr": "[timeFormat(datum.value, '%d %b'), timeFormat(datum.value, '%m') == '01' ? timeFormat(datum.value, '%Y') : '']",
"labelOffset": 4,
"labelPadding": -24,
"tickSize": 30,
"gridDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
},
"tickDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
}
}
},
"color": {
"aggregate": "sum",
"field": "metric",
"type": "quantitative",
"format" : ".2%",
"title":["metric"],
"scale":{
"range": [
"#e57373",
"#ffd54f",
"#81c784"
],
"domain": [0,1]
},
"values" : [0,1],
"legend": {"labelExpr": "[datum.label]*100+\"%\""},
"condition": [
{
"selection": "hover",
"value": "#17c5e8"
}
]
}
},
"selection": {
"hover": {
"type": "single",
"empty": "none",
"on": "mouseover",
"clear": "mouseout"
},
"grid": {
"type": "interval",
"bind": "scales"
}
}
},{
"mark": {
"type": "rule",
"color": "red",
"size": 1,
"tooltip" : true
},
"transform": [
{
"calculate": "now()",
"as": "Today"
}
],
"encoding": {
"x": {
"field": "Today",
"type": "temporal"
}
}
}
]
}
EDIT : I tried the following config, but it doesn't work correctly...
{
"$schema": "https://vega.github.io/schema/vega-lite/v4.json",
"description": "Gantt Chart.",
"background" : "#fbfbfb",
"data": {
"values": [
{"task": "A", "start": "2021-01-01", "end": "2021-05-01", "landing": "2021-04-01", "metric" : 1},
{"task": "B", "start": "2021-03-01", "end": "2021-08-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "C", "start": "2021-05-01", "end": "2021-07-01", "landing": "2021-04-01", "metric" : 0.7},
{"task": "D", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.3},
{"task": "E", "start": "2021-07-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.2},
{"task": "F", "start": "2021-08-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.1},
{"task": "G", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "H", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "I", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.8},
{"task": "J", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.9},
{"task": "K", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 1},
{"task": "L", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.4},
{"task": "M", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.3},
{"task": "N", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.2},
{"task": "O", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "P", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 1},
{"task": "Q", "start": "2021-01-01", "end": "2021-05-01", "landing": "2021-04-01", "metric" : 1},
{"task": "R", "start": "2021-03-01", "end": "2021-08-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "S", "start": "2021-05-01", "end": "2021-07-01", "landing": "2021-04-01", "metric" : 0.7},
{"task": "T", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.3},
{"task": "U", "start": "2021-07-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.2},
{"task": "V", "start": "2021-08-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.1},
{"task": "W", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "X", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "Y", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.8},
{"task": "Z", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.9},
{"task": "ZA", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 1},
{"task": "ZB", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.4},
{"task": "ZC", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.3},
{"task": "ZD", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.2},
{"task": "ZE", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "ZF", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 1},
{"task": "ZG", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "ZH", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "ZI", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.8},
{"task": "ZJ", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.9},
{"task": "ZK", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 1},
{"task": "ZL", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.4},
{"task": "ZM", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.3},
{"task": "ZN", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.2},
{"task": "ZO", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "ZP", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 1},
{"task": "ZQ", "start": "2021-01-01", "end": "2021-05-01", "landing": "2021-04-01", "metric" : 1},
{"task": "ZR", "start": "2021-03-01", "end": "2021-08-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "ZS", "start": "2021-05-01", "end": "2021-07-01", "landing": "2021-04-01", "metric" : 0.7},
{"task": "ZT", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.3},
{"task": "ZU", "start": "2021-07-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.2},
{"task": "ZV", "start": "2021-08-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.1},
{"task": "ZW", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "ZX", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.5},
{"task": "ZY", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.8},
{"task": "ZZ", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.9},
{"task": "ZZA", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 1},
{"task": "ZZB", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.4},
{"task": "ZZC", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0.3},
{"task": "ZZD", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 0.2},
{"task": "ZZE", "start": "2021-01-01", "end": "2021-03-01", "landing": "2021-04-01", "metric" : 0},
{"task": "ZZF", "start": "2021-02-01", "end": "2021-05-01", "landing": "2021-06-01", "metric" : 1}
]
},
"hconcat": [
{
"width" : 50,
"height" : 150,
"mark": {"type": "bar", "fill": "lightgray"},
"params": [
{
"name": "brush",
"select": {
"type": "interval",
"encodings": ["y"]
}
}
],
"encoding": {
"y": {"field": "task", "type": "nominal"},
"x": {
"field": "start",
"type": "temporal",
"axis": {"tickCount": 3, "grid": false}
},
"x2": {
"field": "end",
"type": "temporal"
}
}
},
{
"width" : 300,
"height" : 150,
"mark": {"type" : "bar", "tooltip" : true},
"encoding": {
"y": {
"field": "task",
"scale": {"domain": {"param": "brush"}},
"axis": {"title": ""}
},
"x": {
"timeUnit": "yearmonthdate",
"field": "start",
"type" : "temporal",
"axis": {
"tickCount": 12,
"labelAlign": "left",
"labelExpr": "[timeFormat(datum.value, '%d %b'), timeFormat(datum.value, '%m') == '01' ? timeFormat(datum.value, '%Y') : '']",
"labelOffset": 4,
"labelPadding": -24,
"tickSize": 30,
"gridDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
},
"tickDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
}
}
},
"x2": {
"timeUnit": "yearmonthdate",
"field": "end",
"type" : "temporal",
"axis": {
"tickCount": 12,
"labelAlign": "left",
"labelExpr": "[timeFormat(datum.value, '%d %b'), timeFormat(datum.value, '%m') == '01' ? timeFormat(datum.value, '%Y') : '']",
"labelOffset": 4,
"labelPadding": -24,
"tickSize": 30,
"gridDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
},
"tickDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
}
}
},
"color": {
"aggregate": "sum",
"field": "metric",
"type": "quantitative",
"format" : ".2%",
"title":["metric"],
"scale":{
"range": [
"#e57373",
"#ffd54f",
"#81c784"
],
"domain": [0,1]
},
"values" : [0,1],
"legend": {"labelExpr": "[datum.label]*100+\"%\""},
"condition": [
{
"selection": "hover",
"value": "#17c5e8"
}
]
}
},
"selection": {
"hover": {
"type": "single",
"empty": "none",
"on": "mouseover",
"clear": "mouseout"
},
"grid": {
"type": "interval",
"bind": "scales"
}
}
}
]
}
As the picture in the link below shows, there're overlaping bars... https://i.stack.imgur.com/q75O1.png
Instead of using scale with param, you can provide filter transform and use the params to filter out the 2nd chart data.
Refer the below code or editor:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "Gantt Chart.",
"background": "#fbfbfb",
"data": {
"values": [
{
"task": "A",
"start": "2021-01-01",
"end": "2021-05-01",
"landing": "2021-04-01",
"metric": 1
},
{
"task": "B",
"start": "2021-03-01",
"end": "2021-08-01",
"landing": "2021-06-01",
"metric": 0.5
},
{
"task": "C",
"start": "2021-05-01",
"end": "2021-07-01",
"landing": "2021-04-01",
"metric": 0.7
},
{
"task": "D",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.3
},
{
"task": "E",
"start": "2021-07-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.2
},
{
"task": "F",
"start": "2021-08-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.1
},
{
"task": "G",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "H",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.5
},
{
"task": "I",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.8
},
{
"task": "J",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.9
},
{
"task": "K",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 1
},
{
"task": "L",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.4
},
{
"task": "M",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.3
},
{
"task": "N",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.2
},
{
"task": "O",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "P",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 1
},
{
"task": "Q",
"start": "2021-01-01",
"end": "2021-05-01",
"landing": "2021-04-01",
"metric": 1
},
{
"task": "R",
"start": "2021-03-01",
"end": "2021-08-01",
"landing": "2021-06-01",
"metric": 0.5
},
{
"task": "S",
"start": "2021-05-01",
"end": "2021-07-01",
"landing": "2021-04-01",
"metric": 0.7
},
{
"task": "T",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.3
},
{
"task": "U",
"start": "2021-07-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.2
},
{
"task": "V",
"start": "2021-08-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.1
},
{
"task": "W",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "X",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.5
},
{
"task": "Y",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.8
},
{
"task": "Z",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.9
},
{
"task": "ZA",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 1
},
{
"task": "ZB",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.4
},
{
"task": "ZC",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.3
},
{
"task": "ZD",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.2
},
{
"task": "ZE",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "ZF",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 1
},
{
"task": "ZG",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "ZH",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.5
},
{
"task": "ZI",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.8
},
{
"task": "ZJ",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.9
},
{
"task": "ZK",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 1
},
{
"task": "ZL",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.4
},
{
"task": "ZM",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.3
},
{
"task": "ZN",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.2
},
{
"task": "ZO",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "ZP",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 1
},
{
"task": "ZQ",
"start": "2021-01-01",
"end": "2021-05-01",
"landing": "2021-04-01",
"metric": 1
},
{
"task": "ZR",
"start": "2021-03-01",
"end": "2021-08-01",
"landing": "2021-06-01",
"metric": 0.5
},
{
"task": "ZS",
"start": "2021-05-01",
"end": "2021-07-01",
"landing": "2021-04-01",
"metric": 0.7
},
{
"task": "ZT",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.3
},
{
"task": "ZU",
"start": "2021-07-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.2
},
{
"task": "ZV",
"start": "2021-08-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.1
},
{
"task": "ZW",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "ZX",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.5
},
{
"task": "ZY",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.8
},
{
"task": "ZZ",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.9
},
{
"task": "ZZA",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 1
},
{
"task": "ZZB",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.4
},
{
"task": "ZZC",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0.3
},
{
"task": "ZZD",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 0.2
},
{
"task": "ZZE",
"start": "2021-01-01",
"end": "2021-03-01",
"landing": "2021-04-01",
"metric": 0
},
{
"task": "ZZF",
"start": "2021-02-01",
"end": "2021-05-01",
"landing": "2021-06-01",
"metric": 1
}
]
},
"transform": [
{"window": [{"field": "task", "op": "row_number", "as": "taskRow"}]}
],
"hconcat": [
{
"width": 50,
"height": 150,
"mark": {"type": "bar", "fill": "lightgray"},
"params": [
{"name": "brush", "select": {"type": "interval", "encodings": ["y"]}}
],
"encoding": {
"y": {"field": "task", "type": "nominal"},
"x": {
"field": "start",
"type": "temporal",
"axis": {"tickCount": 3, "grid": false}
},
"x2": {"field": "end", "type": "temporal"}
}
},
{
"width": 300,
"height": 150,
"mark": {"type": "bar", "tooltip": true},
"transform": [
{
"filter": "brush.task ? indexof(slice(brush.task,0,5), datum.task) > -1 : datum.taskRow < 6"
}
],
"encoding": {
"y": {"field": "task", "axis": {"title": ""}},
"x": {
"timeUnit": "yearmonthdate",
"field": "start",
"type": "temporal",
"axis": {
"tickCount": 12,
"labelAlign": "left",
"labelExpr": "[timeFormat(datum.value, '%d %b'), timeFormat(datum.value, '%m') == '01' ? timeFormat(datum.value, '%Y') : '']",
"labelOffset": 4,
"labelPadding": -24,
"tickSize": 30,
"gridDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
},
"tickDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
}
}
},
"x2": {
"timeUnit": "yearmonthdate",
"field": "end",
"type": "temporal",
"axis": {
"tickCount": 12,
"labelAlign": "left",
"labelExpr": "[timeFormat(datum.value, '%d %b'), timeFormat(datum.value, '%m') == '01' ? timeFormat(datum.value, '%Y') : '']",
"labelOffset": 4,
"labelPadding": -24,
"tickSize": 30,
"gridDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
},
"tickDash": {
"condition": {
"test": {"field": "value", "timeUnit": "month", "equal": 1},
"value": []
},
"value": [2, 2]
}
}
},
"color": {
"aggregate": "sum",
"field": "metric",
"type": "quantitative",
"format": ".2%",
"title": ["metric"],
"scale": {
"range": ["#e57373", "#ffd54f", "#81c784"],
"domain": [0, 1]
},
"values": [0, 1],
"legend": {"labelExpr": "[datum.label]*100+\"%\""},
"condition": [{"selection": "hover", "value": "#17c5e8"}]
}
},
"selection": {
"hover": {
"type": "single",
"empty": "none",
"on": "mouseover",
"clear": "mouseout"
},
"grid": {"type": "interval", "bind": "scales"}
}
}
]
}
If 5 selections are not required then change the filter to:
{
"filter": "brush.task ? indexof(brush.task, datum.task) > -1 : datum.taskRow < 6"
}
Related
PowerShell --- Get Unique Values from PSCustomObject Array
[{ "UserDisplayName": "Test1 User1", "UserPrincipalName": "TestUser1#test.com", "License": "Basic", "UserEmail": "TestUser1#test.com", }, { "UserDisplayName": "Test1 User1", "UserPrincipalName": "TestUser1#test.com", "License": "Basic", "UserEmail": "TestUser1#test.com", }, { "UserDisplayName": "Test2 User2", "UserPrincipalName": "TestUser2#test.com", "License": "Basic", "UserEmail": "TestUser2#test.com", }, { "UserDisplayName": "Test3 User3", "UserPrincipalName": "TestUser3#test.com", "License": "Basic", "UserEmail": "TestUser3#test.com", }, { "UserDisplayName": "Test1 User1", "UserPrincipalName": "TestUser1#test.com", "License": "Basic", "UserEmail": "TestUser1#test.com", }, { "UserDisplayName": "Test1 User1", "UserPrincipalName": "TestUser1#test.com", "License": "Basic", "UserEmail": "TestUser1#test.com", }, { "UserDisplayName": "Test2 User2", "UserPrincipalName": "TestUser2#test.com", "License": "Basic", "UserEmail": "TestUser2#test.com", }, { "UserDisplayName": "Test3 User3", "UserPrincipalName": "TestUser3#test.com", "License": "Basic", "UserEmail": "TestUser3#test.com", }, { "UserDisplayName": "Test2 User2", "UserPrincipalName": "TestUser2#test.com", "License": "Basic", "UserEmail": "TestUser2#test.com", }, { "UserDisplayName": "Test1 User1", "UserPrincipalName": "TestUser1#test.com", "License": "Basic", "UserEmail": "TestUser1#test.com", }] Here the PSCustomObject array and i want to get list of unique objects in PSCustomObject array, can any one helpme on this? Here is my expected Output { "UserDisplayName": "Test1 User1", "UserPrincipalName": "TestUser1test.com", "License": "Basic", "UserEmail": "TestUser1#test.com", }, { "UserDisplayName": "Test2 User2", "UserPrincipalName": "TestUser2#test.com", "License": "Basic", "UserEmail": "TestUser2#test.com", }, { "UserDisplayName": "Test3 User3", "UserPrincipalName": "TestUser3#test.com", "License": "Basic", "UserEmail": "TestUser3#test.com", },
You can use Sort-Object -Unique to sort the data according to some property and only keep objects with distinct values (for that property): $sortedUnique = $array |Sort-Object UserPrincipalName -Unique
Nx shared asset library
I want my React app in my Nx monorepo to retrieve all the assets in my asset library called common-assets. I managed to do it with my NextJS app like so : project.json of my NextJS app { "$schema": "../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "apps/clients", "projectType": "application", "implicitDependencies": ["common-assets"], "targets": { "build": { "executor": "#nrwl/next:build", "outputs": ["{options.outputPath}"], "defaultConfiguration": "production", "options": { "root": "apps/clients", "outputPath": "dist/apps/clients", "assets": [ { "input": "libs/common/assets/src/lib", "glob": "**/*", "output": "assets" } ] }, ... } I tried to do the exact same thing for my react App by modifying the asset key in the project.json project.json of my React app : "$schema": "../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "apps/sellers/src", "projectType": "application", "implicitDependencies": ["common-assets"], "targets": { "build": { "executor": "#nrwl/web:webpack", "outputs": ["{options.outputPath}"], "defaultConfiguration": "production", "options": { "compiler": "babel", "outputPath": "dist/apps/sellers", "index": "apps/sellers/src/index.html", "baseHref": "/", "main": "apps/sellers/src/main.tsx", "polyfills": "apps/sellers/src/polyfills.ts", "tsConfig": "apps/sellers/tsconfig.app.json", "assets": [ "apps/sellers/src/favicon.ico", "apps/sellers/src/assets", { "input": "libs/common/assets/src/lib", "glob": "**/*", "output": "src/assets" } ], "styles": ["apps/sellers/src/styles.scss"], "scripts": [], "webpackConfig": "#nrwl/react/plugins/webpack" }, "configurations": { "development": { "extractLicenses": false, "optimization": false, "sourceMap": true, "vendorChunk": true }, "production": { "fileReplacements": [ { "replace": "apps/sellers/src/environments/environment.ts", "with": "apps/sellers/src/environments/environment.prod.ts" } ], "optimization": true, "outputHashing": "all", "sourceMap": false, "namedChunks": false, "extractLicenses": true, "vendorChunk": false } } }, "serve": { "executor": "#nrwl/web:dev-server", "defaultConfiguration": "development", "options": { "buildTarget": "sellers:build", "hmr": true }, "configurations": { "development": { "buildTarget": "sellers:build:development" }, "production": { "buildTarget": "sellers:build:production", "hmr": false } } }, "lint": { "executor": "#nrwl/linter:eslint", "outputs": ["{options.outputFile}"], "options": { "lintFilePatterns": ["apps/sellers/**/*.{ts,tsx,js,jsx}"] } }, "test": { "executor": "#nrwl/jest:jest", "outputs": ["coverage/apps/sellers"], "options": { "jestConfig": "apps/sellers/jest.config.ts", "passWithNoTests": true } } }, "tags": [] } But it's not working...
I kept assets into image folder and "assets": [ "apps/boost/src/favicon.ico", "apps/boost/src/assets", { "input": "libs/common-assets/assets/src/lib/images", "glob": "**/*", "output": "assets" } ], I'm able to use it into other project as well <img alt="logo" src="/assets/logo.png" />
Do this: { "input": "./libs/common-assets/src/lib/images", "glob": "**/*", "output": "/assets/" } Then access it with: <img alt="logo" src="assets/logo.png" />
expo build failed ENOENT
Facing this error after calling expo build:android. Can anyone check what's the issue ? I'm using windows 8 OS and yarn. app.json "expo": { "name": "GTechApp", "slug": "GTechApp", "version": "1.0.0", "icon": "./assets/images/icons/logo.png", "platforms": [ "ios", "android", "web" ], "assetBundlePatterns": [ "**/*" ], "ios": { "bundleIdentifier": "com.gtech.gtechapp", "buildNumber": "1.0.0", }, "android": { "package": "com.gtech.gtechapp", "versionCode": 1, "icon": "./assets/images/icons/logo.png" } } Thanks for the help.
Split large json file by arrays
I have a large JSON file aprox 30 GB, the schema can be observed below. { "AdresseList": { "type": "array", "items": { "description": "EAID_6043F4D9_C4CA_44d0_BE88_027166A8B008", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "adressebetegnelse": { "description": "EAID_BB398854_F92E_4372_A20A_D7136BB5CD9C", "type": ["string", "null"] }, "dørbetegnelse": { "description": "EAID_16B39B2F_0D4D_45ca_8164_8E1D78D202FC", "type": ["string", "null"] }, "dørpunkt": { "description": "EAID_2E77B0C3_49AF_47b0_AD4E_DD653B99FD0B", "type": ["string", "null"] }, "etagebetegnelse": { "description": "EAID_805BB835_641D_49d5_93E6_80C8E3FFD91C", "type": ["string", "null"] }, "bygning": { "description": "EAID_dst4A2C09_8035_4ca8_8AA0_CBAAB89AF135", "type": ["string", "null"] }, "husnummer": { "description": "EAID_src6919CB_1734_44ef_BE5B_C115B637B2CD", "type": ["string", "null"] } } } }, "AdressepunktList": { "type": "array", "items": { "description": "EAID_00A7AF01_C512_4a85_ADB5_98FB15541948", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time"id_lokalId }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "oprindelse_kilde": { "description": "EAID_B9AAE6C5_974D_4d20_BABA_C62874774F4B.EAID_FD77FC95_714B_4779_B7FA_F9BBAB41758D", "type": ["string", "null"] }, "oprindelse_nøjagtighedsklasse": { "description": "EAID_B9AAE6C5_974D_4d20_BABA_C62874774F4B.EAID_B8A27494_DF27_4aa9_B1F4_EBD68D2479A5", "type": ["string", "null"] }, "oprindelse_registrering": { "description": "EAID_B9AAE6C5_974D_4d20_BABA_C62874774F4B.EAID_10DCC555_0BE9_4991_AD8C_DEA595CB08A0", "type": ["string", "null"], "format": "date-time" }, "oprindelse_tekniskStandard": { "description": "EAID_B9AAE6C5_974D_4d20_BABA_C62874774F4B.EAID_181528AD_2DA3_4e9d_BF38_81916A924D2A", "type": ["string", "null"] }, "position": { "description": "EAID_4B062EDE_CE8C_414b_AB85_B5A1FD72AA78", "type": ["string", "null"] } } } }, "HusnummerList": { "type": "array", "items": { "description": "EAID_D0A626FC_CCAE_4209_B2F6_AC919B74A528", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "adgangsadressebetegnelse": { "description": "EAID_EDCC14FC_63ED_4ebe_8B52_3E406831A148", "type": ["string", "null"] }, "adgangspunkt": { "description": "EAID_E3A37E0C_D0D8_4c30_BBD5_2F26F7A24591", "type": ["string", "null"] }, "husnummerretning": { "description": "EAID_1A906922_EFAC_4182_AA8C_08332D52C6EE", "type": ["string", "null"] }, "husnummertekst": { "description": "EAID_83A4C230_5C5A_4ffb_B136_0315DD9F8DBE", "type": ["string", "null"] }, "vejpunkt": { "description": "EAID_F6BAEBD6_0306_4641_9DEA_C1441D986AFB", "type": ["string", "null"] }, "jordstykke": { "description": "EAID_dst052F4B_D60C_4ccd_BAE5_6BCED78FE40C", "type": ["string", "null"] }, "placeretPåForeløbigtJordstykke": { "description": "EAID_dstC82C82_CC9D_4d7d_9B8A_8F4A1ADFB5AE", "type": ["string", "null"] }, "geoDanmarkBygning": { "description": "EAID_dst3C28C5_D640_4bc0_9014_FDC7CBF30581", "type": ["string", "null"] }, "adgangTilBygning": { "description": "EAID_dst3E4349_6115_4191_AF4F_243CCE561C41", "type": ["string", "null"] }, "adgangTilTekniskAnlæg": { "description": "EAID_dst79A4C1_23B2_4c0c_85CC_60C6E2EA5AE0", "type": ["string", "null"] }, "vejmidte": { "description": "EAID_dstC9842D_CF82_4dc5_8114_3FF7AEF90C17", "type": ["string", "null"] }, "afstemningsområde": { "description": "EAID_dstB6088D_EE9E_451c_8070_088AA4520FA6", "type": ["string", "null"] }, "kommuneinddeling": { "description": "EAID_dst714AB4_FE21_446f_BEE5_7AE65691A45B", "type": ["string", "null"] }, "menighedsrådsafstemningsområde": { "description": "EAID_dst08DF20_7055_4542_8D3D_F8FCCD9A7125", "type": ["string", "null"] }, "sogneinddeling": { "description": "EAID_dst0864F0_E380_4aa6_A644_25974107FC47", "type": ["string", "null"] }, "supplerendeBynavn": { "description": "EAID_dstF5C960_23DB_454c_A8A8_41B231DF61C7", "type": ["string", "null"] }, "navngivenVej": { "description": "EAID_dst74C4B5_0F0F_4a51_B317_BA74938B605F", "type": ["string", "null"] }, "postnummer": { "description": "EAID_dst3F5BA7_EB6C_47a2_AC4B_90C72D4F3585", "type": ["string", "null"] } } } }, "NavngivenVejList": { "type": "array", "items": { "description": "EAID_0CB629B5_8D1F_486c_A319_717EDF879B82", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "administreresAfKommune": { "description": "EAID_31D3BE04_2F70_4092_8381_5517A5543634", "type": ["string", "null"] }, "beskrivelse": { "description": "EAID_C132D872_7F07_4ebf_BC6B_37049F2E5EB8", "type": ["string", "null"] }, "udtaltVejnavn": { "description": "EAID_788F8478_A747_412d_9DE6_FEE0DB4C1BFA", "type": ["string", "null"] }, "vejadresseringsnavn": { "description": "EAID_9621DD9D_50E3_4426_AB5A_A5E43DED4B05", "type": ["string", "null"] }, "vejnavn": { "description": "EAID_CA00150C_5B5C_4c32_AE72_A7EE5AEDE015", "type": ["string", "null"] }, "vejnavnebeliggenhed_oprindelse_kilde": { "description": "EAID_4C594A8E_797B_40bb_B60D_0E5C9159DCD3.EAID_7F8EB510_AD02_4fd5_844B_C9AB17FB1798.EAID_FD77FC95_714B_4779_B7FA_F9BBAB41758D", "type": ["string", "null"] }, "vejnavnebeliggenhed_oprindelse_nøjagtighedsklasse": { "description": "EAID_4C594A8E_797B_40bb_B60D_0E5C9159DCD3.EAID_7F8EB510_AD02_4fd5_844B_C9AB17FB1798.EAID_B8A27494_DF27_4aa9_B1F4_EBD68D2479A5", "type": ["string", "null"] }, "vejnavnebeliggenhed_oprindelse_registrering": { "description": "EAID_4C594A8E_797B_40bb_B60D_0E5C9159DCD3.EAID_7F8EB510_AD02_4fd5_844B_C9AB17FB1798.EAID_10DCC555_0BE9_4991_AD8C_DEA595CB08A0", "type": ["string", "null"], "format": "date-time" }, "vejnavnebeliggenhed_oprindelse_tekniskStandard": { "description": "EAID_4C594A8E_797B_40bb_B60D_0E5C9159DCD3.EAID_7F8EB510_AD02_4fd5_844B_C9AB17FB1798.EAID_181528AD_2DA3_4e9d_BF38_81916A924D2A", "type": ["string", "null"] }, "vejnavnebeliggenhed_vejnavnelinje": { "description": "EAID_4C594A8E_797B_40bb_B60D_0E5C9159DCD3.EAID_93C24B4D_0641_4073_B260_1EC7F2024CF4", "type": ["string", "null"] }, "vejnavnebeliggenhed_vejnavneområde": { "description": "EAID_4C594A8E_797B_40bb_B60D_0E5C9159DCD3.EAID_1C496CD9_4541_4574_974D_B641F186077F", "type": ["string", "null"] }, "vejnavnebeliggenhed_vejtilslutningspunkter": { "description": "EAID_4C594A8E_797B_40bb_B60D_0E5C9159DCD3.EAID_C3E042F2_A66E_40f4_92A1_7C7024A30D16", "type": ["string", "null"] } } } }, "NavngivenVejKommunedelList": { "type": "array", "items": { "description": "EAID_34D070E5_DD89_4984_8054_16BA70936EA0", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "kommune": { "description": "EAID_0A04B5E9_9F12_49cb_B2AF_AFEE0315AE2B", "type": ["string", "null"] }, "vejkode": { "description": "EAID_852A683F_3E30_4009_A003_B3C8F6F76930", "type": ["string", "null"] }, "navngivenVej": { "description": "EAID_dstE87A3E_ECA3_4f38_A586_117287E4754A", "type": ["string", "null"] } } } }, "NavngivenVejPostnummerList": { "type": "array", "items": { "description": "EAID_EA75B9ED_59CD_4d67_A340_A1CB578CC1B7", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "navngivenVej": { "description": "EAID_1B3CAEB0_80FA_486f_ABD1_818B332C905C", "type": ["string", "null"] }, "postnummer": { "description": "EAID_AD2844E3_7F05_4d8d_967E_44BA3D12C4B4", "type": ["string", "null"] } } } }, "NavngivenVejSupplerendeBynavnList": { "type": "array", "items": { "description": "EAID_5F14BDC8_7D97_433b_B28D_F8A56A1B9F13", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "navngivenVej": { "description": "EAID_7CF789EC_31C0_4af3_B75B_77674A26DECD", "type": ["string", "null"] }, "supplerendeBynavn": { "description": "EAID_21C0B8C7_8B67_406c_BDC1_21ADBA284867", "type": ["string", "null"] } } } }, "PostnummerList": { "type": "array", "items": { "description": "EAID_449B3570_F0F7_494e_9756_D49E60644CD0", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "navn": { "description": "EAID_9E7FA46D_52D9_4615_B24C_599BB28D1923", "type": ["string", "null"] }, "postnr": { "description": "EAID_8F8BACBF_E985_4dc1_BCF4_27F5C3FD0BB1", "type": ["string", "null"] }, "postnummerinddeling": { "description": "EAID_E5F5DDF9_3CF4_4304_B02D_E67AB0CDD619", "type": ["string", "null"] } } } }, "SupplerendeBynavnList": { "type": "array", "items": { "description": "EAID_9D39B21D_E73C_4f1b_9C6C_B75412DAAD77", "type": "object", "properties": { "forretningshændelse": { "description": "EAID_1CE948DD_FC3D_4638_8913_A2D35A00F64D", "type": ["string", "null"] }, "forretningsområde": { "description": "EAID_C955CFEC_E2A0_47da_9F76_6452FCC9E4E2", "type": ["string", "null"] }, "forretningsproces": { "description": "EAID_A9A40479_E58D_4c7a_A0EA_F8EC4829ECAC", "type": ["string", "null"] }, "id_namespace": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_6CEB0356_5CBF_4159_B96B_A2489DD2DAC8", "type": ["string", "null"] }, "id_lokalId": { "description": "EAID_D273E3D8_A3F4_41bc_AF9C_E67B4A29C008.EAID_9AB90AE0_9F85_4164_9B25_8EB2139D65A5", "type": ["string", "null"] }, "registreringFra": { "description": "EAID_96862BAA_95CA_46aa_A6A0_757327A10BF7", "type": ["string", "null"], "format": "date-time" }, "registreringsaktør": { "description": "EAID_9F724D2B_7763_4997_8C85_580610BABC1F", "type": ["string", "null"] }, "registreringTil": { "description": "EAID_301BF58F_26E7_4d1f_B7B6_3881F8C1B0A5", "type": ["string", "null"], "format": "date-time" }, "status": { "description": "EAID_22AF1E6A_73A8_4c89_96EB_C307235DFD19", "type": ["string", "null"] }, "virkningFra": { "description": "EAID_AB768062_FD24_4960_8AA1_C6BFF90C00C5", "type": ["string", "null"], "format": "date-time" }, "virkningsaktør": { "description": "EAID_8E60197F_D857_47c6_8611_75B63D0940FD", "type": ["string", "null"] }, "virkningTil": { "description": "EAID_3058C5FD_9824_48ba_B62C_C24587BF6537", "type": ["string", "null"], "format": "date-time" }, "navn": { "description": "EAID_8359992A_59C4_48c4_981D_7A42F20CA168", "type": ["string", "null"] }, "supplerendeBynavn": { "description": "EAID_C6722E9B_EF6C_425d_9373_A933C01A6A64", "type": ["string", "null"] } } } } } I would like to split this large document into a file for each array but I couldn't find a method, I tried to make a bash script using jq but with no succes, the script can also be seen below for f in $(jq -r 'keys[]') ; do jq ".[\"$f\"]" < input.json > "$f.json" done < input.json Does somebody know a way for spliting the file with bash or any other methods?
You can use a simple python3 script: import json json_file = open('file.json') parsed = json.load(json_file) for key, value in parsed.items(): new_json = open(key + '.json', 'a') new_json.write(json.dumps(value)) new_json.close() json_file.close()
Chrome-debugger requires authorization after launching
I used create-react-app to create new react application. I have not changed absolutely anything except for adding configuration "Chrome-launch" into launch.json. After debug launching it always requires some authorization. According to chrome.debugger documentation I added to manifest.json this: "permissions": [ "debugger"] But it did not help. Now I have no idea how to get through it. Please, could someone give me a hint how to launch chrome-debugger without any authorization? I have used this debugger many times in the past and it never required authorization, I have no idea what has changed. Behaviour in the browser: launch.json: { "version": "0.2.0", "configurations": [ { "type": "chrome", "request": "launch", "name": "Launch Chrome against localhost", "url": "http://localhost:8080", "webRoot": "${workspaceFolder}" } ] } manifest.json: { "short_name": "React App", "name": "Create React App Sample", "permissions": [ "debugger" ], "icons": [ { "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" }, { "src": "logo192.png", "type": "image/png", "sizes": "192x192" }, { "src": "logo512.png", "type": "image/png", "sizes": "512x512" } ], "start_url": ".", "display": "standalone", "theme_color": "#000000", "background_color": "#ffffff" } package.json: { "name": "kinosal", "version": "0.1.0", "private": true, "dependencies": { "react": "^16.9.0", "react-dom": "^16.9.0", "react-scripts": "3.1.1" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } }