Avatar billede kristianrnielsen Juniormester
04. maj 2017 - 11:49 Der er 12 kommentarer og
1 løsning

JSON sti

Kære Eksperter,

Jeg er ny i JSON, og håber at I kan hjælpe mig med dette, formentlig rette lette, spørgsmål.

Jeg skal have konverteret bitraten på en MP3, hvilket bliver gjort via en API på en anden server. Konverteringen er som den skal være, men jeg skal bruge et id på JSON responderingen som string. Dog kan jeg ikke finde den rigtige "sti".

Svaret ser ud som følger:

HTTP/1.1 201 Created Server: nginx Date: Thu, 04 May 2017 09:45:28 GMT Content-Type: application/json Content-Length: 967 Connection: keep-alive X-Powered-By: PHP/5.6.29 Cache-Control: private, must-revalidate pragma: no-cache expires: -1 Vary: Accept-Encoding,User-Agent X-Robots-Tag: noindex, nofollow Accept-Ranges: bytes Age: 0 X-Cache: MISS X-Server: web2 {"id":"8ef9aacc-183f-4546-8b94-2c24e168d218","token":"4617b2fc94419216b9decda9c6aa51a2","type":"job","status":{"code":"downloading","info":"The file is currently downloading from the source URL."},"errors":[],"process":true,"conversion":[{"id":"81fc91dc-052f-4349-85ea-54ccdf947251","target":"mp3","category":"audio","options":{"audio_bitrate":112,"start":"00:00:30","channels":"stereo","frequency":null,"download_password":null,"allow_multiple_outputs":false,"normalize":false,"end":null}}],"input":[{"id":"2a9e4eb2-b2ab-4491-b6f9-be89a265c027","type":"remote","source":"http:\/\/upfrontservice.net\/promoplayer\/media\/client1\/audio\/4.mp3","filename":"","size":0,"hash":"","checksum":"","content_type":"","created_at":"2017-05-04T11:45:28","modified_at":"2017-05-04T11:45:28"}],"output":[],"callback":"","notify_status":false,"server":"https:\/\/www10.online-convert.com\/dl\/web2","spent":0,"created_at":"2017-05-04T11:45:28","modified_at":"2017-05-04T11:45:28"}

Og den string jeg kal bruge er conversion ID'et. Jeg har prøvet følgende, hvilket giver et tomt svar:

$new_id = $response->{'conversion'}->{'id'};

Såfremt I kan prege mig ind på den rigtige sti, vil det blive utroligt værdsat :)

Alle de bedste ønsker,
Kristian Nielsen
Avatar billede Slater Ekspert
04. maj 2017 - 13:26 #1
Conversion er et array, så det skal være

$response->conversion[0]->id
Avatar billede kristianrnielsen Juniormester
04. maj 2017 - 14:09 #2
Kan stadig ikke få den til at spytte ID'et ud som en string. Kan det være at "conversion" ligger som en del af et andet array, som dermed skal smides ind før?
Avatar billede jakobdo Ekspert
04. maj 2017 - 14:16 #3
Prøv at vis koden der "skyder" mod dette api ?

Måske du skal huske: json_encode() på svaret du får retur, og så burde du kunne følge #1
Avatar billede acore Ekspert
04. maj 2017 - 14:17 #4
Kan du vise php koden? Det andet bliver lidt meget gætværk
Avatar billede kristianrnielsen Juniormester
04. maj 2017 - 14:29 #5
$json_resquest = '{
  "input":[
      {
        "type":"remote",
        "source":"$url"
      }
  ],
  "conversion":[
      {
        "target":"mp3",
        "category":"audio",
        "options":{
            "audio_bitrate":"112",
            "start":"00:00:02",
            "channels":"stereo"
        }
      }
  ]
   
    }';

    // No need to change parameters below this line.

    $ch = curl_init($endpoint);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_resquest);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'X-Oc-Api-Key: '.$apikey,
        'Content-Type: application/json',
        'cache-control: no-cache'
    ));
    if ($debug) {
        curl_setopt($ch, CURLOPT_HEADER, TRUE);
        curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
    }

    $response = curl_exec($ch);
    $info = curl_getinfo($ch);
    $error =  curl_error($ch);
    curl_close($ch);
/*
    if ($debug) {
        var_dump($info);
    }
    */
   
   
//    echo $response."\n";
    if (!empty($error)) {
        echo $error;
    }
   
    $json = json_decode($response);
    $new_id = $json->{'conversion'}[0]->{'id'};
    echo "<br><br>The New ID is: $new_id";
Avatar billede acore Ekspert
04. maj 2017 - 14:29 #6
Lavede lige en test med dine data:

$jstest = '
{"id":"8ef9aacc-183f-4546-8b94-2c24e168d218","token":"4617b2fc94419216b9decda9c6aa51a2","type":"job","status":{"code":"downloading","info":"The file is currently downloading from the source URL."},"errors":[],"process":true,"conversion":[{"id":"81fc91dc-052f-4349-85ea-54ccdf947251","target":"mp3","category":"audio","options":{"audio_bitrate":112,"start":"00:00:30","channels":"stereo","frequency":null,"download_password":null,"allow_multiple_outputs":false,"normalize":false,"end":null}}],"input":[{"id":"2a9e4eb2-b2ab-4491-b6f9-be89a265c027","type":"remote","source":"http:\/\/upfrontservice.net\/promoplayer\/media\/client1\/audio\/4.mp3","filename":"","size":0,"hash":"","checksum":"","content_type":"","created_at":"2017-05-04T11:45:28","modified_at":"2017-05-04T11:45:28"}],"output":[],"callback":"","notify_status":false,"server":"https:\/\/www10.online-convert.com\/dl\/web2","spent":0,"created_at":"2017-05-04T11:45:28","modified_at":"2017-05-04T11:45:28"}
';
$jsdata = json_decode($jstest, true);
var_dump($jsdata['conversion'][0]['id']);

giver

string(36) "81fc91dc-052f-4349-85ea-54ccdf947251"

Hvorfor [0] skal med har jeg ingen god forklaring på, ud over at sådan ser data ud.
Avatar billede acore Ekspert
04. maj 2017 - 14:33 #7
Hvis du erstatter  de 3 sidste linier med

$json = json_decode($response, true);
$new_id = $json['conversion'][0]['id']);
echo "<br><br>The New ID is: $new_id";

vil jeg tro du er tæt på
Avatar billede kristianrnielsen Juniormester
04. maj 2017 - 14:58 #8
Når jeg bruger var_dump får jeg NULL, og når jeg prøver den sidste udgave (har fjernet slut-parantesen, da jeg ellers får fejl), er stringen tom :-/

Kan det være den første del af "response" som giver problemer?

Altså:

HTTP/1.1 201 Created Server: nginx Date: Thu, 04 May 2017 09:45:28 GMT Content-Type: application/json Content-Length: 967 Connection: keep-alive X-Powered-By: PHP/5.6.29 Cache-Control: private, must-revalidate pragma: no-cache expires: -1 Vary: Accept-Encoding,User-Agent X-Robots-Tag: noindex, nofollow Accept-Ranges: bytes Age: 0 X-Cache: MISS X-Server: web2
Avatar billede acore Ekspert
04. maj 2017 - 15:02 #9
Prøv at køre min kode fra #6 og din egen kode, og se om der er forskel på et var_dump af $json.

PS. Du har bemærket, at jeg havde

json_decode($response, true);

mens du havde

json_decode($response);
Avatar billede acore Ekspert
04. maj 2017 - 15:06 #10
Hvis de ikke giver det samme, er det sikkert headeren, som du er inde på.

Prøv også med

curl_setopt($ch, CURLOPT_HEADER, false);
Avatar billede kristianrnielsen Juniormester
04. maj 2017 - 15:12 #11
Feeeeeeeedt - havde fuldstændig overset muligheden for at give linien med CURLOPT_HEADER, og kun prøvet at køre false på nogle af de andre, hvilket ikke gav noget resultat.

Det virker nu - jeg takker mange gange for hjælpen! :)
Avatar billede acore Ekspert
04. maj 2017 - 15:14 #12
Det var godt vi fandt løsningen :)

Er det rigtigt forstået, at

$json->{'conversion'}[0]->{'id'};

faktisk er rigtigt?
Avatar billede kristianrnielsen Juniormester
04. maj 2017 - 15:23 #13
Smed den ind sådan her: $json['conversion'][0]['id'];
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester