Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Estoy empezando a mirar toda esta parte de JSON debido a que se está mirando hacer consultas sobre RESTAPI y me han surgido dudas sobre JSON desde Perl. Sobre todo es a la hora capturar datos necesarios de las consultas y de cómo tratar la parte de JSON desde Perl.
Por ejemplo, tengo el siguiente código:
Using perl Syntax Highlighting
- #!C:\Perl64\bin
- # Módulos
- use LWP::UserAgent;
- use JSON;
- use Data::Dumper;
- my $json = JSON->new;
- my $ua = LWP::UserAgent->new
- (
- ssl_opts => { verify_hostname => 0, verify_peer => 0},
- );
- my $content_type_v2 = "application/vnd.netbackup+json; version=2.0";
- my $token;
- my $hostname = "<ip>";
- my $base_url = "<url>";
- my $url = "$base_url/login";
- my $req = HTTP::Request->new(POST => $url);
- $req->header('content-type' => 'application/json');
- my $post_data = '{ "domainType": "unixpwd", "domainName": "<hostname>", "userName": "<user>", "password": "<pass>" }';
- $req->content($post_data);
- my $resp = $ua->request($req);
- if ($resp->is_success)
- {
- my $message = decode_json($resp->content);
- $token = $message->{"token"};
- print "Login succeeded with status code: ", $resp->code, "\n";
- }
- else
- {
- print "HTTP POST error code: ", $resp->code, "\n";
- print "HTTP POST error message: ", $resp->message, "\n";
- }
- my $url = "$base_url/admin/jobs";
- print("URL --> *$url*\n");
- my $req = HTTP::Request->new(GET => $url);
- $req->header('content-type' => $content_type_v2);
- $req->header('Authorization' => $token);
- print "\n\n**************************************************************";
- print "\n\n Making GET Request to JOBS \n\n";
- my $resp = $ua->request($req);
- if ($resp->is_success)
- {
- #my $djson = decode_json($resp->content);
- #print "JSON --> $json\n";
- #my $attributes = $djson->{'data'}{'attributes'};
- #print "Atributes --> $attributes\n";
- #print Dumper $json;
- my $message = $resp->decoded_content;
- #print Dumper $message;
- #my $json_decoded = decode_json $message;
- # Guardamos los datos en la variable principal de perl y traducimos los datos a lo que necesitamos.
- #$_ = $message;
- #s/{"data":\[//g;
- #s/{"links":\{"self":\{"href":"/\n/g; # quitamos los datos de la línea style
- #s/{"href"://g;
- #s/\},/\n/g;
- #s/"//g;
- #s/\}//g;
- #s/\}//g;
- #s/,/\n/g;
- #$message=$_;
- #print "List policy succeeded with status code: ", $resp->code, "\n";
- print "Compact Json body for list policy: \n", $message, "\n\n";
- }
- else {
- print "HTTP GET error code: ", $resp->code, "\n";
- print "HTTP GET error message: ", $resp->message, "\n";
- }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
En el código ahora mismo estoy sacando los datos tal cual me los devuelve la consulta que realizo y tengo comentado una limpieza de la salida para tener los datos más ordenados. Mi pregunta es si para la siguiente salida de datos hay alguna forma de sacar los campos dentro de "attributes" de alguna forma sencilla o es mejor limpiando como estoy haciendo.
Using text Syntax Highlighting
{"data":[{"links":{"self":{"href":"/admin/jobs/42850"},"file-lists":{"href":""},"try-logs":{"href":""}},"type":"job","id":"42850","attributes":{"jobId":42850,"parentJobId":42846,"activeProcessId":22133,"mainProcessId":0,"productType":0,"jobType":"DBBACKUP","jobSubType":"IMMEDIATE","policyType":"NETBACKUP_CATALOG","policyName":"","scheduleType":"DIFFERENTIAL_INCREMENTAL","scheduleName":"Differential-Inc","clientName":"","controlHost":"","jobOwner":"root","jobGroup":"root","backupId":"","sourceMediaId":"","sourceStorageUnitName":"","sourceMediaServerName":"","destinationMediaId":"","destinationStorageUnitName":"","destinationMediaServerName":"","dataMovement":"","streamNumber":0,"copyNumber":0,"priority":0,"retention":3,"compression":0,"status":0,"state":"DONE","done":0,"numberOfFiles":981,"estimatedFiles":0,"kilobytesTransfered":42080,"kilobytesToTransfer":0,"transferRate":29406,"percentComplete":0,"currentFile":"","restartable":0,"suspendable":0,"resumable":0,"killable":0,"frozenImage":0,"transportType":"LAN","dedupRatio":0.0,"currentOperation":-2,"qReasonCode":-1,"qResource":"","robotName":"","vaultName":"","profileName":"","sessionId":0,"numberOfTapeToEject":0,"submissionType":0,"acceleratorOptimization":0,"dumpHost":"","instanceDatabaseName":"","auditUserName":"","auditDomainName":"","auditDomainType":0,"restoreBackupIDs":"","startTime":"2019-03-13T06:33:26.000Z","endTime":"2019-03-13T06:34:59.000Z","activeTryStartTime":"2019-03-13T06:33:26.000Z","lastUpdateTime":"2019-03-13T06:34:59.395Z","kilobytesDataTransferred":0,"try":1}},}
Tampoco entiendo mucho el tema sobre todo de que esto me devuelve la referencia de un %HASH por lo que a mi entender debería de poder tratarlo como un hash pero no sé muy bien a la hora de realizar este tratamiento cómo hacerlo exactamente. He visto en algún mensaje en el foro que se usa "say" para imprimir los datos, pero tampoco entiendo cómo hacer la consulta directamente a las variables dentro del JSON, en este caso del campo "attributes".