skip to Main Content

I need to find if a string exists in JSON Kraken.com retrieved file:
I get it this way:

$sURL = "https://api.kraken.com/0/public/OHLC?pair=ETHAED&interval=5&since=". strtotime("-1 day");

$ch = curl_init();

$config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';

curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_URL, $sURL);

$result = curl_exec($ch);

curl_close($ch);

$obj = json_decode($result, true);

Sometimes pairs names differ from URL string and JSON (i.e. I can write LTCEUR but in JSON I see LTCZEUR

So I need to check if the string does exists in the $obj

$sName = "ETHAED";

print_r($obj);

if (in_array($sName,$obj)){

    echo("Found ".$sName."<br>");

}else{

    echo("NOT FOUND"."<br>");

}

but this doesn’t work.

if I do a print_r() I can clearly see the pair name, but can’t verify it.
Any suggestion?

Kraken.com JSON is not standard so I can’t easily retrieve the name of the PAIR, I tried all possible combinations of $obj["result"][$sName] but without result.

Example:
https://api.kraken.com/0/public/OHLC?pair=LTCUSD
Here pair is LTCUSD

But on Json:

{"error":[],"result":{"XLTCZUSD":[[1669197540,"78.74","78.74","78.58","78.59","78.59","23.82168114",8]

2

Answers


  1. Chosen as BEST ANSWER

    Yes it works perfectly. Just a little correction on format:

    if (array_key_exists($sName, $obj['result'])){
    echo("FOUND ".$sName."<br>");           
    }else{
    echo("ERROR ".$sName."<br>"); 
    }
    

  2. Something is wrong with your comparison.

    in_array($sName,$obj)
    

    Should be:

    is_array($obj['result'][$sName] ?? null)
    

    Caveat: Read that carefully; it’s now is instead of in.

    Or, if you don’t care if it’s null, a string, or non-array:

    array_key_exists($obj['result'], $sName)
    

    Detailed explanation

    in_array($sName,$obj) is checking if $sName matches (== equality) any of the elements in the first level of your array.

    Since the first level of the array looks like this (pseudocode here):

    error => []
    result => [
        XLTCZUSD => [...]
        last: 123456
    ]
    

    Since 'ETHAED' is neither [] nor is it [XLTCZUSD => [...],last: 123456] it doesn’t match anything.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search