2016-07-14 13 views
0

Ich habe einige Daten aus Dampf API zu holen versucht, die JSON zurückgibt wie folgt aus:PHP nicht zurück json dekodieren

{"success":true,"lowest_price":"$2.76","volume":"345","median_price":"$2.60"} 

aber es ändert nichts an der Variablen zurück, die anderswo verwendet wird. Es zeigt nur 0.

Hier ist mein JSON-Code, was mache ich falsch?

$steam1 = "http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=Chroma%20Case%20Key"; 
$json = file_get_contents($steam1); 
$json_data = json_decode($json, true); 
$median1= $json_data["median_price"]; 
$media1 = $median1/'2.49'; 

Danke für jede Hilfe, die jemand anbieten kann.

+3

Warum sollten Sie denken, eine Teilung durch eine Saite wäre eine gute Idee? – RiggsFolly

+0

Der Preis beginnt mit '$' und kann daher nicht als Zahl geparst werden. Sie müssen das '$' zuerst entfernen. – Barmar

+1

Warum denken Sie, das Problem ist mit 'json_decode'? Hast du 'var_dump ($ json_data)' versucht? – Barmar

Antwort

3

json_decode() funktioniert gut. Das Problem besteht darin, dass Sie keine Arithmetik ausführen können, wenn eine Zahl mit $ beginnt.

Sie müssen das $ Zeichen am Anfang des Preises entfernen, bevor Sie es als eine Zahl verwenden können. Andernfalls wird es in 0 konvertiert.

$median1 = ltrim($json_data["median_price"], '$'); 
$media1 = $median1/2.49; 
+0

Ehrfürchtig. Vielen Dank. Wird als korrekt markiert, sobald es erlaubt ist. – Mehr

1

Es gibt einen Dollar in der $json_data["median_price"] damit entfernt werden müssen, bevor Sie das Feld in jeder Arithmetik verwenden können.

Auch müssen Sie eine Nummer als Divisor und nicht als Zeichenfolge verwenden.

Dies funktioniert

<?php 
$steam1 = "http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=Chroma%20Case%20Key"; 
$json = file_get_contents($steam1); 
$json_data = json_decode($json, true); 
$median1= $json_data["median_price"]; 
$median1 = substr($median1,0,1) == '$' ? substr($median1,1) : $median1; //remove the $ 
$media1 = $median1/2.49; 
echo $media1; 
1

=)) Ich hoffe, Sie scherzen!

// It's ok: 
$steam1 = "http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=Chroma%20Case%20Key"; 
$json = file_get_contents($steam1); 
$json_data = json_decode($json, true); 

// here you set $median1 = "$2.60", yeah, it's string (not float number) 
$median1= $json_data["median_price"]; 

// here you trying to divide one string to another 
$media1 = $median1/'2.49'; 

Es ist sehr interessant Weg)))

ändern letzte Zeichenfolge:

if (preg_match('/([0-9]+(?:\.[0-9]+))/', $median1, $matches)) { 
    $media1 = round($matches[1]/2.49, 2); 
} else { 
    $media1 = 0; 
} 
echo $media1 . "\n"; 

Viel Glück!

+2

Wow, Großer Hammer - Kleine Nuss – RiggsFolly

+0

Ich kenne die Seite steamcommunity.com nicht, aber wenn alle Preise in $ sind, kannst du 'ltrim ($ median1, '$')/2.49' verwenden. In meiner Version versuchen Skripte jeden int oder float Wert aus dem String $ median1 zu finden. –

+0

Ich habe mich nicht beschwert. Sieht kugelsicher aus – RiggsFolly