Modulo util
Il modulo util fornisce funzioni pratiche come il giudizio del tipo di dati, la copia degli attributi dell'oggetto, l'analisi delle stringhe del modello e l'elaborazione degli eventi.
Di seguito è riportata un'introduzione specifica ed esempi:
- Determinare il tipo di dati -
util.is[type]
Questo modulo fornisce metodi comeisDate
,isRegExp
,isError
ecc. per determinare il tipo di dati dei parametri in entrata, ad esempio:
1
2
3var util = require('util');
console.log(util.isDate(new Date()));
console.log(util.isRegExp(/some regexp/));
- Copia delle proprietà dell'oggetto:
util.inherits()
questo metodo può facoltativamente ereditare un costruttore da un altro, implementando così l'ereditarietà del prototipo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var util = require('util');
function Animal() {
this.name = 'Animal';
this.sleep = function() {
console.log(this.name + '正在睡觉!');
}
}
Animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food);
};
function Cat() {
this.name = 'cat';
}
util.inherits(Cat, Animal);
Utilizzare Cat
questo costruttore per ereditare Animal
le proprietà dell'istanza e le proprietà del prototipo di e stampare Cat
le proprietà e i metodi dell'istanza.
1
2
3
4var cat = new Cat();
console.log(cat.name);
console.log(cat.eat('fish'));
console.log(cat.sleep());
- util.format() Modello di output formattato
1
2
3
4
5const util = require('util');
const str1 = util.format('%s:%s', 'foo');
const str2 = util.format('%s:%s', 'foo', 'bar', 'baz');
console.log(str1) // => 'foo:%s'
console.log(str2) // => 'foo:bar baz'
Quelli sopra riportati sono util
alcuni metodi comuni dei moduli, che spesso possono essere utilizzati per semplificare l'effettivo processo di sviluppo.
oggetto
LruCache
Oggetto cache LRU (usato meno di recente), vedereLruCacheoggetto.
1LruCache util.LruCache;
TextDecoder
TextDecoderoggetto di decodificazione, vedereTextDecoderoggetto.
1TextDecoder util.TextDecoder;
TextEncoder
TextEncoderCodifica degli oggetti, vediTextEncoderoggetto.
1TextEncoder util.TextEncoder;
types
typesIl modulo fornisce funzioni strumento per determinare i tipi di dati.
1types util.types;
funzione statica
format
Formattare le variabili in base al formato specificato
1
2static String util.format(String fmt,
...args);
Parametri di chiamata:
- fmt: Stringa, stringa di formato
- args: ..., elenco parametri opzionale
Risultati restituiti:
- String, restituisce la stringa formattata
formato variabile di formato
1static String util.format(...args);
Parametri di chiamata:
- args: ..., elenco parametri opzionale
Risultati restituiti:
- String, restituisce la stringa formattata
inherits
Eredita le funzioni del prototipo da un costruttore all'altro. Il prototipo del costruttore verrà impostato su un nuovo oggetto creato dalla superclasse (superConstructor).
1
2static util.inherits(Value constructor,
Value superConstructor);
Parametri di chiamata:
- constructor: Valore, costruttore iniziale
- superConstructor: Valore, la superclasse ereditata
inspect
La funzione restituisce la rappresentazione in formato stringa di obj, utilizzata principalmente per il debug. È possibile utilizzare opzioni aggiuntive per modificare determinati aspetti della stringa formattata.
1
2static String util.inspect(Value obj,
Object options = {});
Parametri di chiamata:
- obj: Valore, specifica l'oggetto da elaborare
- options: Oggetto, specifica le opzioni di controllo del formato
Risultati restituiti:
- String, restituisce la stringa formattata
Sono supportati i seguenti parametri:
1
2
3
4
5
6
7
8
9{
"colors": false, // specify if output should be colorized, defaults to false
"depth": 2, // specify the max depth of the output, defaults to 2
"table": false, // specify if output should be a table, defaults to false
"encode_string": true, // specify if string should be encoded, defaults to true
"maxArrayLength": 100, // specify max number of array elements to show, set to 0 or negative to show no elements, defaults to 100
"maxStringLength": 10000, // specify max string length to output, set to 0 or negative to show no strings, defaults to 10000
"fields": [], // specify the fields to be displayed, defaults to all
}
deprecate
Incapsula la funzione specificata. Questa funzione è solo compatibile e non genera avvisi.
1
2
3static Function util.deprecate(Function fn,
String msg,
String code = "");
Parametri di chiamata:
- fn: Funzione, data la funzione che deve essere incapsulata
- msg: stringa, dato il messaggio di avviso
- code: stringa, dato il numero di avviso
Risultati restituiti:
- Function, se il risultato dell'incapsulamento
isEmpty
Controlla se la variabile data non contiene alcun valore (nessuna proprietà enumerabile)
1static Boolean util.isEmpty(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se vuoto
isArray
Controlla se la variabile data è un array
1static Boolean util.isArray(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un array
isBoolean
Verifica se la variabile data è booleana
1static Boolean util.isBoolean(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è booleano, restituisce True
isNull
Controlla se la variabile data è Null
1static Boolean util.isNull(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è Null, restituisce True
isNullOrUndefined
Controlla se la variabile specificata è Null o Non definita
1static Boolean util.isNullOrUndefined(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è Null o Indefinito, restituisce True
isNumber
Verifica se la variabile data è un numero
1static Boolean util.isNumber(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un numero
isBigInt
Verifica se la variabile data è un BigInt
1static Boolean util.isBigInt(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un numero
isString
Controlla se la variabile data è una stringa
1static Boolean util.isString(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è una stringa
isUndefined
Controlla se la variabile specificata è Indefinita
1static Boolean util.isUndefined(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è Indefinito, restituisce True
isRegExp
Verifica se la variabile data è un oggetto regolare
1static Boolean util.isRegExp(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un oggetto normale
isObject
Verifica se la variabile data è un oggetto
1static Boolean util.isObject(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un oggetto
isDate
Verifica se la variabile data è un oggetto data
1static Boolean util.isDate(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un oggetto data
isNativeError
Verifica se la variabile specificata è un oggetto errore
1static Boolean util.isNativeError(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se si tratta di un oggetto errore
isPrimitive
Controlla se la variabile data è di tipo primitivo
1static Boolean util.isPrimitive(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un tipo primitivo
isSymbol
Controlla se la variabile data è di tipo Symbol
1static Boolean util.isSymbol(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è di tipo Symbol, restituisce True
isDataView
Controlla se la variabile specificata è di tipo DataView
1static Boolean util.isDataView(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è un tipo DataView, restituisce True
isExternal
Controlla se la variabile specificata è di tipo Esterno
1static Boolean util.isExternal(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è un tipo Esterno, restituisce True
isMap
Controlla se la variabile data è di tipo Map
1static Boolean util.isMap(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è di tipo Mappa, restituisce True
isMapIterator
Controlla se la variabile specificata è di tipo MapIterator
1static Boolean util.isMapIterator(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un tipo MapIterator
isPromise
Controlla se la variabile specificata è di tipo Promise
1static Boolean util.isPromise(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è di tipo Promise, restituisce True
isAsyncFunction
Controlla se la variabile specificata è di tipo AsyncFunction
1static Boolean util.isAsyncFunction(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è di tipo AsyncFunction, restituisce True
isSet
Controlla se la variabile data è di tipo Set
1static Boolean util.isSet(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è un tipo Set, restituisce True
isSetIterator
Controlla se la variabile specificata è di tipo SetIterator
1static Boolean util.isSetIterator(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è un tipo SetIterator, restituisce True
isTypedArray
Controlla se la variabile specificata è di tipo TypedArray
1static Boolean util.isTypedArray(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è un tipo TypedArray, restituisce True
isUint8Array
Controlla se la variabile specificata è di tipo Uint8Array
1static Boolean util.isUint8Array(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è di tipo Uint8Array
isFunction
Verifica se la variabile data è un oggetto funzione
1static Boolean util.isFunction(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, restituisce True se è un oggetto funzione
isBuffer
Verifica se la variabile data è una funzioneBufferoggetto
1static Boolean util.isBuffer(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da rilevare
Risultati restituiti:
- Boolean, se è una funzioneBufferL'oggetto restituisce True
isDeepEqual
La profondità del valore del test è uguale al valore atteso
1
2static Boolean util.isDeepEqual(Value actual,
Value expected);
Parametri di chiamata:
- actual: Valore, il valore da testare
- expected: Valore, valore atteso
Risultati restituiti:
- Boolean, restituisce True se le profondità sono uguali
has
Interroga se l'oggetto specificato contiene la chiave specificata
1
2static Boolean util.has(Value v,
String key);
Parametri di chiamata:
- v: Valore, dato l'oggetto da interrogare
- key: String, specifica la chiave da interrogare
Risultati restituiti:
- Boolean, restituisce un array di tutte le chiavi dell'oggetto
keys
Interrogare tutti gli array di chiavi dell'oggetto specificato
1static Array util.keys(Value v);
Parametri di chiamata:
- v: Valore, dato l'oggetto da interrogare
Risultati restituiti:
- Array, restituisce un array di tutte le chiavi dell'oggetto
values
Interrogare tutte le matrici di valori dell'oggetto specificato
1static Array util.values(Value v);
Parametri di chiamata:
- v: Valore, dato l'oggetto da interrogare
Risultati restituiti:
- Array, restituisce un array di tutti i valori dell'oggetto
clone
Clona la variabile data, se è un oggetto o un array, copia il contenuto nel nuovo oggetto
1static Value util.clone(Value v);
Parametri di chiamata:
- v: Valore, data la variabile da clonare
Risultati restituiti:
- Value, restituisce il risultato del clone
deepFreeze
Congelare un oggetto.L'oggetto congelato e gli oggetti in esso contenuti non potranno essere modificati.
1static util.deepFreeze(Value v);
Parametri di chiamata:
- v: Valore, specifica l'oggetto da congelare
extend
Estendi i valori chiave di uno o più oggetti all'oggetto specificato
1
2static Value util.extend(Value v,
...objs);
Parametri di chiamata:
- v: Valore, specifica l'oggetto da estendere
- objs: ..., specifica uno o più oggetti per l'espansione
Risultati restituiti:
- Value, restituisce il risultato espanso
_extend
Estendi i valori chiave di uno o più oggetti all'oggetto specificato, che è un alias di extend
1
2static Value util._extend(Value v,
...objs);
Parametri di chiamata:
- v: Valore, specifica l'oggetto da estendere
- objs: ..., specifica uno o più oggetti per l'espansione
Risultati restituiti:
- Value, restituisce il risultato espanso
pick
Ritorno aobjectCopia, filtra solo i valori degli attributi della chiave specificata
1
2static Object util.pick(Value v,
...objs);
Parametri di chiamata:
- v: Valore, specifica l'oggetto da filtrare
- objs: ..., specificare uno o più tasti per la selezione
Risultati restituiti:
- Object, restituisce risultati filtrati
omit
Ritorno aobjectCopia, escludendo solo il valore dell'attributo della chiave specificata
1
2static Object util.omit(Value v,
...keys);
Parametri di chiamata:
- v: Valore, specifica l'oggetto da filtrare
- keys: ..., specificare una o più chiavi per l'esclusione
Risultati restituiti:
- Object, restituisce i risultati esclusi
first
Ottieni il primo elemento dell'array
1static Value util.first(Value v);
Parametri di chiamata:
- v: Valore, dato l'array da ottenere
Risultati restituiti:
- Value, restituisce l'elemento recuperato
Ottieni i primi elementi multipli di un array
1
2static Value util.first(Value v,
Integer n);
Parametri di chiamata:
- v: Valore, dato l'array da ottenere
- n: Intero, specifica il numero di elementi da ottenere
Risultati restituiti:
- Value, restituisce la matrice di elementi ottenuta
last
Ottieni l'ultimo elemento dell'array
1static Value util.last(Value v);
Parametri di chiamata:
- v: Valore, dato l'array da ottenere
Risultati restituiti:
- Value, restituisce l'elemento recuperato
Ottieni più elementi alla fine di un array
1
2static Value util.last(Value v,
Integer n);
Parametri di chiamata:
- v: Valore, dato l'array da ottenere
- n: Intero, specifica il numero di elementi da ottenere
Risultati restituiti:
- Value, restituisce la matrice di elementi ottenuta
unique
Ottieni una copia deduplicata degli elementi di un array
1
2static Array util.unique(Value v,
Boolean sorted = false);
Parametri di chiamata:
- v: Valore, dato l'array da duplicare
- sorted: Booleano, specifica se l'array è ordinato. Se l'array è ordinato, verrà utilizzato un algoritmo veloce.
Risultati restituiti:
- Array, restituisce l'array dopo aver rimosso gli elementi duplicati
union
Combina i valori di uno o più array in un array con valori univoci
1static Array util.union(...arrs);
Parametri di chiamata:
- arrs: ..., specifica uno o più array da unire
Risultati restituiti:
- Array, restituisce il risultato unito
intersection
Restituisce l'intersezione dell'array contenente arr escludendo uno o più elementi dell'array.
1static Array util.intersection(...arrs);
Parametri di chiamata:
- arrs: ..., specifica uno o più array utilizzati per calcolare l'intersezione
Risultati restituiti:
- Array, restituisce il risultato del calcolo dell'intersezione
flatten
Converte un array con più livelli di annidamento (l'annidamento può contenere un numero qualsiasi di livelli) in un array con un solo livello. Se passi il parametro superficiale, l'array verrà ridotto a una sola dimensione di nidificazione.
1
2static Array util.flatten(Value arr,
Boolean shallow = false);
Parametri di chiamata:
- arr: Valore, specifica l'array da convertire
- shallow: Booleano, specifica se ridurre solo una dimensione di nidificazione, il valore predefinito è false
Risultati restituiti:
- Array, restituisce il risultato della conversione
without
Restituisce un array contenente uno o più elementi nell'array arr, esclusi uno o più elementi.
1
2static Array util.without(Value arr,
...els);
Parametri di chiamata:
- arr: Valore, specifica l'array da escludere
- els: ..., specifica uno o più elementi da escludere
Risultati restituiti:
- Array, restituisce i risultati esclusi
difference
Restituisce un array contenente gli elementi nell'array arr esclusi gli elementi without dell'array.
1
2static Array util.difference(Array list,
...arrs);
Parametri di chiamata:
- list: Array, specifica l'array da escludere
- arrs: ..., specifica uno o più array da escludere
Risultati restituiti:
- Array, restituisce i risultati esclusi
each
Attraversa tutti gli elementi nell'elenco e genera ciascun elemento in ordine. Se viene passato il parametro di contesto, l'iteratore è associato all'oggetto di contesto. Ogni volta che viene chiamato l'iteratore, vengono passati tre parametri: (elemento, indice, elenco)
1
2
3static Value util.each(Value list,
Function iterator,
Value context = undefined);
Parametri di chiamata:
- list: Valore, specifica l'elenco o l'oggetto da attraversare
- iterator: Funzione, specifica la funzione di callback utilizzata per l'attraversamento
- context: Valore, specifica l'oggetto di contesto associato quando si chiama l'iteratore
Risultati restituiti:
- Value, restituisce l'elenco stesso
map
Ogni valore nell'elenco viene mappato su un nuovo array tramite una funzione di trasformazione (iteratore). Se viene passato il parametro di contesto, l'iteratore è associato all'oggetto di contesto. Ogni volta che viene chiamato l'iteratore, vengono passati tre parametri: (elemento, indice, elenco)
1
2
3static Array util.map(Value list,
Function iterator,
Value context = undefined);
Parametri di chiamata:
- list: Valore, specifica l'elenco o l'oggetto da trasformare
- iterator: Funzione, specifica la funzione di callback utilizzata per la trasformazione
- context: Valore, specifica l'oggetto di contesto associato quando si chiama l'iteratore
Risultati restituiti:
- Array, restituisce il risultato della trasformazione
reduce
Ridurre gli elementi nell'elenco a un singolo valore. Se viene passato il parametro di contesto, l'iteratore è associato all'oggetto di contesto. Ogni volta che viene chiamato l'iteratore, vengono passati tre parametri: (memo, elemento, indice, elenco)
1
2
3
4static Value util.reduce(Value list,
Function iterator,
Value memo,
Value context = undefined);
Parametri di chiamata:
- list: Valore, specifica l'elenco o l'oggetto da riepilogare
- iterator: Funzione, specifica la funzione di callback utilizzata per la risoluzione
- memo: Valore, specifica il valore iniziale della riduzione
- context: Valore, specifica l'oggetto di contesto associato quando si chiama l'iteratore
Risultati restituiti:
- Value, restituisce il risultato riepilogato
parseArgs
Analizza la stringa della riga di comando e restituisce l'elenco dei parametri
1static NArray util.parseArgs(String command);
Parametri di chiamata:
- command: String, specifica la stringa della riga di comando da analizzare
Risultati restituiti:
- NArray, restituisce l'elenco dei parametri analizzati
compile
Compila lo script in codice binario
1
2
3static Buffer util.compile(String srcname,
String script,
Integer mode = 0);
Parametri di chiamata:
- srcname: String, specifica il nome dello script da aggiungere
- script: String, specifica il codice dello script da compilare
- mode: Numero intero, modalità di compilazione, 0: modulo, 1: script, 2: lavoratore, il valore predefinito è 0
Risultati restituiti:
- Buffer, restituisce il codice binario compilato
util.compileGli script possono essere compilati in blocchi di dati in esecuzione interni v8 (codice eseguibile non automatico). Il codice compilato può essere caricato ed eseguito direttamente da run e require dopo essere stato salvato come *.jsc.
Poiché dopo la compilazione, il codice di destinazione non sarà in grado di ottenere in modo inverso il codice sorgente, i programmi che si basano su Function.toString non verranno eseguiti correttamente.
sync
Avvolgi funzioni di callback o asincrone per chiamarle in modo sincrono
1
2static Function util.sync(Function func,
Boolean async_func = false);
Parametri di chiamata:
- func: Funzione, data la funzione che deve essere racchiusa
- async_func: Booleano, specifica che func viene elaborata come funzione asincrona. Se è falsa, verrà giudicata automaticamente.
Risultati restituiti:
- Function, restituisce una funzione che viene eseguita in modo sincrono
util.syncElabora la funzione di callback o la funzione asincrona in una funzione di sincronizzazione per facilitare la chiamata.
L'esempio di richiamata è il seguente:
1
2
3
4
5
6
7
8
9
10
11// callback
var util = require('util');
function cb_test(a, b, cb) {
setTimeout(() => {
cb(null, a + b);
}, 100);
}
var fn_sync = util.sync(cb_test);
console.log(fn_sync(100, 200));
Un esempio asincrono è il seguente:
1
2
3
4
5
6
7
8
9// async/await
var util = require('util');
async function async_test(a, b) {
return a + b;
}
var fn_sync = util.sync(async_test);
console.log(fn_sync(100, 200));
Per le funzioni di restituzione della promessa che non sono contrassegnate come asincrone, la modalità di sincronizzazione può essere specificata manualmente:
1
2
3
4
5
6
7
8
9
10
11// async/await
var util = require('util');
function async_test(a, b) {
return new Promise(function(resolve, reject) {
resolve(a + b);
});
}
var fn_sync = util.sync(async_test, true);
console.log(fn_sync(100, 200));
promisify
Funzione di callback wrap per la chiamata asincrona
1static Function util.promisify(Function func);
Parametri di chiamata:
- func: Funzione, data la funzione che deve essere racchiusa
Risultati restituiti:
- Function, restituisce la funzione asincrona
util.promisifyElabora la funzione di callback come funzione asincrona per facilitare la chiamata.
L'esempio di richiamata è il seguente:
1
2
3
4
5
6
7
8
9
10
11// callback
var util = require('util');
function cb_test(a, b, cb) {
setTimeout(() => {
cb(null, a + b);
}, 100);
}
var fn_sync = util.promisify(cb_test);
console.log(async fn_sync(100, 200));
callbackify
Funzione wrap asincrona per la chiamata di richiamata
1static Function util.callbackify(Function func);
Parametri di chiamata:
- func: Funzione, data la funzione che deve essere racchiusa
Risultati restituiti:
- Function, restituisce la funzione di callback
util.callbackifyElabora la funzione asincrona in una funzione di callback per facilitare la chiamata.
Un esempio asincrono è il seguente:
1
2
3
4
5
6
7
8
9
10
11
12// async
var util = require('util');
async function async_test(a, b) {
return a + b;
}
var fn_callback = util.callbackify(async_test);
fn_callback(100, 200, (err, result) => {
console.log(result);
});
buildInfo
Interrogare le informazioni sulla versione corrente del motore e del componente
1static Object util.buildInfo();
Risultati restituiti:
- Object, restituisce l'oggetto della versione del componente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24{
"fibjs": "0.25.0",
"clang": "9.1",
"date": "Jun 12 2018 07:22:40",
"vender": {
"ev": "4.24",
"expat": "2.2.5",
"gd": "2.2.4",
"jpeg": "8.3",
"leveldb": "1.17",
"mongo": "0.7",
"pcre": "8.21",
"png": "1.5.4",
"mbedtls": "2.6.1",
"snappy": "1.1.2",
"sqlite": "3.23.0",
"tiff": "3.9.5",
"uuid": "1.6.2",
"v8": "6.7.288.20",
"v8-snapshot": true,
"zlib": "1.2.7",
"zmq": "3.1"
}
}