在PHP中解析JSON键和值

问题描述 投票:0回答:1

这些是JSON中的值“ _id”:“ 5db81ae803f7410018f7c081”,“热度”:72793.81406699134,“ activityHotness”:0.10295588022415446,“ primaryCategory”:“交易所”,“字”:443,“同类文章”:[],“硬币”: [{“ _id”:“ 59cb59e81c073f09e76f614b”,“ name”:“ Bitcoin”,“ slug”:“比特币”,“ tradingSymbol”:“ btc”},{“ _id”:“ 59d21e9b83a0523906a45dc5”,“ name”:“ EOS”,“ slug”:“ eos”,“ tradingSymbol”:“ eos”},{“ _id”:“ 59d21e9b83a0523906a45dbe”,“ name”:“ Tether”,“ slug”:“系绳”,“ tradingSymbol”:“ usdt”}],“ description”:“全球第五大加密货币交易所OKEx计划启动Tether期货交易,提供杠杆率高达100倍的线性期货合约。\ n全球第五大加密货币交易所OKEx计划推出Tether(USDT)期货交易,提供与…的线性期货合约”,“ publishedAt”:“ 2019-10-29T10:16:00.000Z”,“ title”:“ OKEx将推出高达100倍杠杆的USDT期货交易”,“ url”:“ https://cryptocontrol.io/r/api/article/5db81ae803f7410018f7c081?ref=5d9f090e03f7410018f41938”,“资源”: {“ _id”:“ 59d70be3ef8bf95cc2aa2b4f”,“ name”:“ CoinTelegraph”,“ url”:“ https://cointelegraph.com/”,“ favicon”:“ https://assets.cryptocontrol.io/favicons/59d70be3ef8bf95cc2aa2b4f.png”},“ sourceDomain”:“ cointelegraph.com”,“ originalImageUrl”:“ https://images.cointelegraph.com/images/740_IGh0dHBzOi8vczMuY29pbnRlbGVncmFwaC5jb20vc3RvcmFnZS91cGxvYWRzL3ZpZXcvMWY5YTllNWViMGI1NTNhMWJkNWVlYjBhZWNkOTAxYzkuanBn.jpg”},我想将Id的值截断为硬币并显示从描述开始的值我正在尝试从Blockchain数组中的JSON文件中获取键和值。但我想截断其中一些。不知道该怎么办。

我已经尝试过使用foreach循环

<?php 
$getJsonData = file_get_contents("sample.json");
$jsonArray = json_decode($getJsonData);
$mainName = "blockchain";

$i = 1;
foreach($jsonArray->$mainName as $row){
    echo "<br>----------record $i start <br><br>";

    foreach($row as $key => $val){
        if(is_object($val)){
            foreach($val as $ky => $v1){
                echo $key.' => '.$ky.': '.$v1;
                echo '<br>';
            }
        }else{
            echo $key.': '.$val;
            echo '<br>';
        } 
    }
    echo "<br>----- record $i end <br><br>";
    $i++;
}
?>
php json
1个回答
0
投票

由于您在没有可选第二个参数的情况下调用json_decode(),因此JSON对象被解码为PHP对象,而不是关联数组。因此,您不能使用foreach()遍历对象属性。

使用json_decode($getJsonData, true),然后所有对象将成为关联数组。

然后您可以使用array_keys()获取所有键,并删除_idcoins之间的所有键。

$keys = array_keys($jsonArray[$mainName][0]);
$id_index = array_search('_id', $keys);
$coins_index = array_search('coins', $keys);
array_splice($keys, $id_index, $coins_index - $id_index + 1); // remove keys from _id to coins
foreach ($jsonArray[$mainName] as $row) {
    foreach ($keys as $key) {
        $val = $jsonArray[$mainName][$key];
        if (is_array($val)) {
            foreach ($val as $k => $v) {
                echo "$key => $k: $v<br>";
            }
        } else {
            echo "$key: $val<br>";
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.