查找JSON格式的条目(Kraken.com不常见的JSON格式)[duplicate]

2nc8po8w  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(135)

此问题在此处已有答案

Multidimensional array: check if key exists(3个答案)
2天前关闭。
我需要找到一个字符串是否存在于JSON Kraken.com检索文件:我是这样理解的:

$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);

有时,对名称与URL字符串和JSON不同(例如,我可以写LTCEUR,但在JSON中我看到LTCZEUR
所以我需要检查字符串**是否存在于$obj

$sName = "ETHAED";

print_r($obj);

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

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

}else{

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

}

但这没用。
如果我执行print_r(),我可以清楚地看到对的名称,但是不能验证它。有什么建议吗?
Kraken.com JSON不是标准的,所以我无法轻松检索PAIR的名称,我尝试了$obj[“result”][$sName]的所有可能组合,但没有结果。
示例:https://api.kraken.com/0/public/OHLC?pair=LTCUSD此处的货币对为LTCUSD
但关于Json:
{"error":[],"result":{"XLTCZUSD":[[1669197540,"78.74","78.74","78.58","78.59","78.59","23.82168114",8]

q9yhzks0

q9yhzks01#

你的比较有问题。

in_array($sName,$obj)

应道:

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

**警告:**请仔细阅读;现在是is而不是in

或者,如果你不在乎它是null、字符串还是非数组:

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

详细说明

in_array($sName,$obj)正在检查$sName是否与数组第一级中的任何元素匹配(==相等)。
由于数组的第一层如下所示(此处为伪代码):

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

由于'ETHAED'既不是[],也不是[XLTCZUSD => [...],last: 123456],因此它不匹配任何内容。

68bkxrlz

68bkxrlz2#

是的,它工作得很完美。只是在格式上做了一点修正:

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

相关问题