Jak wyświetlić tylko część a nie całość

0
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);

powyższy kod wyświetli mi coś takiego:


{
	"success" : true,
	"message" : "",
	"result" : [{
			"Imie" : "Ala",
			"Display" : null
		}
    ]
}

Ja chciałbym żeby wyświetliło się tylko :"Ala"
Próbowałem to wypisać takim kodem:

$obj = ["result"]["Imie"];

Niestety nie działa, cały czas wypisuje wszystko, ktoś wie jak mi pomóc?

2
{
    "success" : true,
    "message" : "",
    "result" : [{
            "Imie" : "Ala",
            "Display" : null
        }
    ]
}

To jest ciągle json. Skoro masz json_decode to dlaczego w wyniku echo masz ciągle Json?
Powinieneś na końcu mieć objekt i móc dostać się do pola poprze $obj->result->imie

0
$obj->result->imie;

nie działa
wyświetla taki błąd w tej lini:
Trying to get property of non-object

0

To nie jest array tylko json. Jak otrzymasz array to będziesz mógł dostać się do imienia tak jak pisałeś.

0
n_bie napisał(a):

To nie jest array tylko json. Jak otrzymasz array to będziesz mógł dostać się do imienia tak jak pisałeś.

A jak otrzymać array?

1

Ja zasugerowałem, że albo wklejasz zły kod, albo robisz echo, czy chcesz się dostać do danych przed wykonaniem json_decode().
Zerknij do przykładów w dokumentacji PHP: http://php.net/manual/pl/function.json-decode.php
Jak już koniecznie chcesz tablicę to podajesz "true" jako drugi paramet json_decode($json, true).

0

To jak mam to napisać żeby zadziałało?

0

Teoretycznie jest w porządku, więc strzelam gdzieś błąd przy wykonywaniu kodu.

0

Po dodaniu "true" jako drugi paramet json_decode($json, true).

$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult,true);
$obj = ["result"]["Imie"];

Wyskakuje błąd że niezdefiniowany index: Imie

0
$json = '{
    "success" : true,
    "message" : "",
    "result" : [{
            "Imie" : "Ala",
            "Display" : null
        }
    ]
}';

$decodedToObjecet = json_decode($json);
print_r($decodedToObjecet->result[0]->Imie);

//Output Ala
1

Dane które pobieram z tej strony są dynamiczne i co chwile się zmieniają. Jak przypisze do $json tak jak ty to zawsze mi się to samo będzie wyświetlać. Chcę zrobić żeby zawsze się wyświetlało to imie jakie w danej chwili jest wygenerowane, więc nie można tak przypisać....

0

Z tego co piszesz, te dane docelowe, które chcesz odczytać to jakaś tablica wyników, którą trzeba zdekodować jsonem (parametr success to zwrotna wiadomość czy pobranie się udało, message to info dla ciebie, natomiast result to wyniki).
Nie wiem dokładnie co chcesz osiągnąć, ale jak chcesz się dostać do wszystkich wyników i ich wartości, musisz to przepętlować, po zdekodowaniu:

$decode=json_decode($x);
foreach($decode->result as $result) { echo $result->Imie; }

Wtedy pobierzesz dane z każdego rezultatu, który zwróci Ci to Twoje api.

0
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);

$decode=json_decode($execResult);     //linia 94
foreach($decode->result as $result){ 
	echo $result->Imie; 

tak miałem podstawić pod x?
bo wywala:
Notice: Trying to get property of non-object in C:\xampp\htdocs\index.php on line 94
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\index.php on line 94

Chcę osiągnąc tak jak pisałem wcześniej czyli napisze jeszcze raz:
mam taki kod:

$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);

i po jego uruchomieniu otrzymuje cos takiego:

{
    "success" : true,
    "message" : "",
    "result" : [{
            "Imie" : "Ala",
            "Display" : null
        }
    ]
}

oczywiście tych wyników jest dużo więcej, ja chce wydobyć z tych wyników tylko jeden dla resultatu "Imie"

0

Piszesz że: "i po jego uruchomieniu otrzymuje cos takiego:...." - nieprawda.
Wklej dokładnie cały kod. Ten "wynik" to var_dump($execResult) czy var_dump($obj) czy jeszcze coś innego? Coś tu kręcisz. :)

0
<?php

$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);

?>

wynik:

{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}

Da się z tego wyciągnąć wynik np dla Name?

0

Robisz coś źle, bo po wykonaniu

$execResult = '{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}';
$obj = json_decode($execResult);

Dostajesz array (to co Ty masz to json)

var_dump($obj);
object(stdClass)[1]
  public 'success' => boolean true
  public 'message' => string '' (length=0)
  public 'result' => 
    array (size=1)
      0 => 
        object(stdClass)[2]
          public 'Name' => string 'WWA' (length=3)
          public 'High' => float 0.01001163
          public 'Low' => float 0.00928114
          public 'SS' => float 67732.95449843
          public 'Last' => float 0.00955998
          public 'Volume' => float 645.4016105
          public 'Time' => string '2017-10-27T23:40:10.393' (length=23)
          public 'Now' => float 0.00955998
          public 'Now2' => float 0.00956
          public 'Open' => int 2477
          public 'Orders' => int 12637
          public 'Prev' => float 0.00939754
          public 'Created' => string '2016-03-12T00:00:00' (length=19)

A potem możesz wywołać np. Name kodem, który był na pierwszej stronie

print_r($obj->result[0]->Name);

WWA

Lub w pętli, która też tu jest wyżej.
Strzelam, że masz gdzieś wywołanie result zanim wykonasz na nim json_decode.

0

No to nie wiem co moge robić źle, wklejam to co mam w pliku index.php i pokazuje wam wynik z localhosta

0

PHP/7.1.10

0

Odpal sobie tu kod, który napisałem http://sandbox.onlinephpfunctions.com/

0
$execResult = '{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}';
$obj = json_decode($execResult);

print_r($obj->result[0]->Name);

po wykonaniu tego twojego kodu na tej stronie otrzymuje WWA, tak samo na localhoscie

0

No to w czym problem? Wcześniej pisałeś, że po takim wywołaniu masz jakieś błędy.

0

Cały czas powtarzam że ja chce otrzymać z tego co mi się wyświetla po wykonaniu tylko część. Jak zrobie tak(dokaładnie taki kod jak poniżej):

<?php
 
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);
 
?>

to otrzymuje

{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}

A ja chce wyciągnąć tylko jedną wartość np. dla powiedzmy Low;

To jak mam to zrobić? z każdym odświeżeniem localhosta wartośc dla Low się zmienia bo te dane są pobierane ze strony, a ty mi piszesz taki kod"

$execResult = '{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}';
$obj = json_decode($execResult);
 

i jak wykonam

print_r($obj->result[0]->Low);

to oczywiście się wyświetli na stronie tylko
0.00928114
ale z każdym odświeżeniem strony wartość zawsze będzie ta sama bo to jest przypisane do $execResult
a ja chce żeby ta wartość była pobierana ze strony z każdym jej odświeżeniem, wartość ta zawsze będzie inna.
Pisze to już kolejny raz o co mi chodzi...

0

Przecież jeśli ten skrypt jest wykonywany przy otworzeniu strony (a raczej jest) to zmienna print_r($obj->result[0]->Low) będzie zawsze taka jaką zwraca to API/curl/połączenie czyli inna...
Żeby ta zmienna była zapisana na zawsze to musisz kombinować z eksportem do jsona/yml etc., ale tego nie chcesz.

Próbowałeś chociaż wykonać ten skrypt u siebie czy z góry zakładasz, że zmienna będzie taka jak przy poprzednim odświeżeniu bo przecież już ją zapisałeś?

0

Polecam wrócić do podstaw: tablice, przypisywanie zmiennych, w ogóle co się dzieje podczas przetwarzania requesta. Coś tu ściemniasz. Albo to jest kiepski trolling albo brakuje Ci fundamentalnych podstaw. To zadanie z technikum czy co? Gdzie byłeś w czasie lekcji? :)

0
<?php
 
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);// tu otrzymujesz json
$obj = json_decode($execResult); //tu otrzymujesz obiekt gdzie dla result przypisana jest tabilca obiektow, pierwszy z nich ma oczywiscie indeks [0]
print_r($obj->result[0]->Name);//to pokaze Ci juz samo imie
?>

Opisałem Ci w komentarzach do kodu krok po kroku o co chodzi.
Upierasz się, najpierw, że w wyniku wykonania funkcji json_decode, otrzymujesz ciągle Json. Co nie jest możliwe.
Potem upierasz się, że po przeładowaniu strony uzyskujesz ciągle ten sam wynik. Tego nie jesteśmy w stanie sprawdzić bo nie wiemy co zwraca Ci Api. Jednak zakładając, że API przy każdym wywołaniu zwraca zawsze inne dane to i wykonanie powyższego kodu powinno je pokazać.
Nikt nie każe Ci przypisywać w kodzie do zmiennej na stałe otrzymanego raz wyniku. Ja starałem Ci się odpowiedzieć na pytanie jak dostać się do danych. Pokazałem Ci to na przykładzie przedstawionego przez Ciebie Jsona bo nie mam dostępu do wyników Twojego API. Podobnie z resztą jak koledzy.
Koledzy słusznie zresztą zasugerowali jeszcze, że wynik może zawierać więcej niż jeden obiekt w result. Wtedy będziesz miał kolejne obiekty w tablicy z następnymi indeksami i jeśli chcesz mieć dostęp do ich wyników musisz zrobić pętlę i dostawać się do obiektów w result w pętli.

0
n_bie napisał(a):

Przecież jeśli ten skrypt jest wykonywany przy otworzeniu strony (a raczej jest) to zmienna print_r($obj->result[0]->Low) będzie zawsze taka jaką zwraca to API/curl/połączenie czyli inna...
Żeby ta zmienna była zapisana na zawsze to musisz kombinować z eksportem do jsona/yml etc., ale tego nie chcesz.

Próbowałeś chociaż wykonać ten skrypt u siebie czy z góry zakładasz, że zmienna będzie taka jak przy poprzednim odświeżeniu bo przecież już ją zapisałeś?

Oczywiście że próbowałem wykonać ten skrypt, cały kod wygląda tak:

<?php
$apikey='xx';
$apisecret='xx';

$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$execResult = '{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}';
$obj = json_decode($execResult);
print_r($obj->result[0]->Low);
	  
 ?>

i po odpaleniu localhosta otrzymuje wszystkie aktualne wyniki oraz na końcu ten przypisany do $execResult czyli 0.00928114.

0
jurek1980 napisał(a):
<?php
 
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);// tu otrzymujesz json
$obj = json_decode($execResult); //tu otrzymujesz obiekt gdzie dla result przypisana jest tabilca obiektow, pierwszy z nich ma oczywiscie indeks [0]
print_r($obj->result[0]->Name);//to pokaze Ci juz samo imie
?>

Opisałem Ci w komentarzach do kodu krok po kroku o co chodzi.
Upierasz się, najpierw, że w wyniku wykonania funkcji json_decode, otrzymujesz ciągle Json. Co nie jest możliwe.
Potem upierasz się, że po przeładowaniu strony uzyskujesz ciągle ten sam wynik. Tego nie jesteśmy w stanie sprawdzić bo nie wiemy co zwraca Ci Api. Jednak zakładając, że API przy każdym wywołaniu zwraca zawsze inne dane to i wykonanie powyższego kodu powinno je pokazać.
Nikt nie każe Ci przypisywać w kodzie do zmiennej na stałe otrzymanego raz wyniku. Ja starałem Ci się odpowiedzieć na pytanie jak dostać się do danych. Pokazałem Ci to na przykładzie przedstawionego przez Ciebie Jsona bo nie mam dostępu do wyników Twojego API. Podobnie z resztą jak koledzy.
Koledzy słusznie zresztą zasugerowali jeszcze, że wynik może zawierać więcej niż jeden obiekt w result. Wtedy będziesz miał kolejne obiekty w tablicy z następnymi indeksami i jeśli chcesz mieć dostęp do ich wyników musisz zrobić pętlę i dostawać się do obiektów w result w pętli.

Wklejam twój kod:

<?php

$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult); 
print_r($obj->result[0]->Name);  //linia 12
?>

i po wykonaniu localhosta dostaje WSZYSTKIE aktualne wyniki z api a pod spodem :
Notice: Trying to get property of non-object in C:\xampp\htdocs\index.php on line 12
Notice: Trying to get property of non-object in C:\xampp\htdocs\index.php on line 12

linia 12 to print_r($obj->result[0]->Name);

1
ajgoron napisał(a):

Polecam wrócić do podstaw: tablice, przypisywanie zmiennych, w ogóle co się dzieje podczas przetwarzania requesta. Coś tu ściemniasz. Albo to jest kiepski trolling albo brakuje Ci fundamentalnych podstaw. To zadanie z technikum czy co? Gdzie byłeś w czasie lekcji? :)

Nie jest to trolling. Nie jest to zadanie ze szkoły, po prostu chce pobrać dane i potem je odpowiednio wykorzystać. A jak widać coś mi się nie udaje, chociaż kod wam pokazuje że się to powinno udać, nie wiem co moge robić źle...

0

Ok, to idźmy od początku:

Odpalasz taki kod:

$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);

W odpowiedzi na Twoje żądanie curl otrzymujesz taki json:

{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}

Ten json obrabiasz funkcją json_decode co w rezultacie daje Ci coś takiego:
Obróbka:

$obj = json_decode($execResult); 

Rezultat:

stdClass Object
(
    [success] => 1
    [message] => 
    [result] => Array
        (
            [0] => stdClass Object
                (
                    [Name] => WWA
                    [High] => 0.01001163
                    [Low] => 0.00928114
                    [SS] => 67732.95449843
                    [Last] => 0.00955998
                    [Volume] => 645.4016105
                    [Time] => 2017-10-27T23:40:10.393
                    [Now] => 0.00955998
                    [Now2] => 0.00956
                    [Open] => 2477
                    [Orders] => 12637
                    [Prev] => 0.00939754
                    [Created] => 2016-03-12T00:00:00
                )

        )

)

Jak widzisz, rezultat zwraca obiekt stdClass w którym jest tablica result zwracająca listę obiektów. Do każdego z tych rezultatów o polu Name możesz więc się dostać w następujący sposób:

$obj->result[0]->Name // czyli obiekt o właściwości result, potem 1 pole z tego obiektu bo to tablica (daje nam obiekt) a następnie pole Name

Jeżeli wszystko jest tak jak opisałem i za każdym razem robisz wywołanie z curla (za każdym odświeżeniem strony np.) to nie ma siły, żebyś nie mógł dostać się do aktualnych rezultatów i ich pól w ten sposób.

Jeżeli dostajesz ostrzeżenie:

Trying to get property of non-object in C:\xampp\htdocs\index.php on line 12

to prawdopodobnie znaczy, że albo Twoja odpowiedź po zdekodowaniu nie jest obiektem albo że pierwszy element tablicy z result nie jest obiektem. A to możesz sam określić patrząc co zwraca Ci funkcja np. var_dump (jakie typy danych czym są)

object(stdClass)#1 (3) {
  ["success"]=>
  bool(true)
  ["message"]=>
  string(0) ""
  ["result"]=>
  array(1) {
    [0]=>
    object(stdClass)#2 (13) {
      ["Name"]=>
      string(3) "WWA"
      ["High"]=>
      float(0.01001163)
      ["Low"]=>
      float(0.00928114)
      ["SS"]=>
      float(67732.95449843)
      ["Last"]=>
      float(0.00955998)
      ["Volume"]=>
      float(645.4016105)
      ["Time"]=>
      string(23) "2017-10-27T23:40:10.393"
      ["Now"]=>
      float(0.00955998)
      ["Now2"]=>
      float(0.00956)
      ["Open"]=>
      int(2477)
      ["Orders"]=>
      int(12637)
      ["Prev"]=>
      float(0.00939754)
      ["Created"]=>
      string(19) "2016-03-12T00:00:00"
    }
  }
}

i jeżeli choć trochę jarzysz podstawy programowania w PHP to wtedy zobaczysz czy masz tam obiekt, tablicę czy jeszcze coś innego i jak się do tego dostać....

0

Ewentualnie curl ma jakiś błąd, json jest nullem i wszystko się sypie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1