Php 如何访问此JSON字符串中的元素/对象?

Php 如何访问此JSON字符串中的元素/对象?,php,json,decode,Php,Json,Decode,我有一个非常大的JSON字符串(超过1mb)。它是这样开始的: [{“timestamp”:1456815458,“total_jobs”:6398,“Last_height”:99045,“jobs”:{“152.62.311.2:123”:[8003”,“Main:5.1/”,1655659260,1395047,“ec4.ap-Southwest-3.amazonaws.com”,“Capetown”,“AU”,“317.8815,57.5”,“Australia/NSW”,“AS1511

我有一个非常大的JSON字符串(超过1mb)。它是这样开始的:

[{“timestamp”:1456815458,“total_jobs”:6398,“Last_height”:99045,“jobs”:{“152.62.311.2:123”:[8003”,“Main:5.1/”,1655659260,1395047,“ec4.ap-Southwest-3.amazonaws.com”,“Capetown”,“AU”,“317.8815,57.5”,“Australia/NSW”,“AS1511”,“Amazon.com,Inc.”,“183.215.34.58:9805:[56734”,“JobPlace2:0.11.0/”,“1455767185”,“KR.215.211”,“首尔”,57.5983126.9783,“亚洲/首尔”,“AS32665”,“HCLC”]

我想能够回显的IP地址以及附加的信息与IP地址(有大约13个子信息后,每个IP地址)

如何做到这一点?我以前从未访问过解码JSON字符串中的类/对象

为了给出所需PHP输出的示例,对于第一个IP地址(152.62.311.2:123),它应该输出:

8003
/主要:5.1/
1655659260
1
395047
ec4.ap-southest-3.amazonaws.com
开普敦
AU
-317.8815
57.5
澳大利亚/新南威尔士州
AS1511
亚马逊公司


这可能不是最好的解决方案,但它是一个解决方案

$decoded = json_decode($json);
$ipInfo= $decoded[0][0]->jobs->{'152.62.311.2:123'};
print_r($ipInfo);
作业数组的输出如下所示:

Array
(
    [0] => 8003
    [1] => /Main:5.1/
    [2] => 1655659260
    [3] => 1
    [4] => 395047
    [5] => ec4.ap-southeast-3.amazonaws.com
    [6] => Capetown
    [7] => AU
    [8] => -317.8815
    [9] => 57.5
    [10] => Australia/NSW
    [11] => AS1511
    [12] => Amazon.com, Inc.
)
您可以在此处看到一个示例:

如果您纯粹想循环并打印所有信息,您可以这样做,尽管这不是一个非常漂亮的解决方案:

$json = '[
    [{
        "timestamp": 1456815458,
        "total_jobs": 6398,
        "latest_height": 99045,
        "jobs": {
            "152.62.311.2:123": [8003, "/Main:5.1/", 1655659260, 1, 395047, "ec4.ap-southeast-3.amazonaws.com", "Capetown", "AU", -317.8815, 57.5, "Australia/NSW", "AS1511", "Amazon.com, Inc."],
            "183.215.34.58:9805": [56734, "/JobPlace2:0.11.0/", 1455767214, 1, 399047, "185.211.134.58", "Seoul", "KR", 57.5983, 126.9783, "Asia/Seoul", "AS32665", "HCLC"]
        }
    }]
]';




$decoded = json_decode($json);
$jobs = $decoded[0][0]->jobs->{'152.62.311.2:123'};

header('content-type: text/plain');
foreach ($decoded[0][0]->jobs as $ip => $ipData) {
    echo $ip . PHP_EOL;
    foreach ($ipData as $data) {
        echo $data . PHP_EOL;
    }
}

鸽子回答了这个问题。下面是一个简洁的答案,效果很好:

$json_data = '[[{"timestamp": 1456815458,"total_jobs": 6398,"latest_height": 99045,"jobs": {"152.62.311.2:123": [8003,"/Main:5.1/", 1655659260, 1, 395047, "ec4.ap-southeast-3.amazonaws.com", "Capetown", "AU", -317.8815, 57.5, "Australia/NSW", "AS1511", "Amazon.com, Inc."],"183.215.34.58:9805": [56734, "/JobPlace2:0.11.0/", 1455767214, 1, 399047, "185.211.134.58", "Seoul", "KR", 57.5983, 126.9783, "Asia/Seoul", "AS32665", "HCLC"]}}]]';

$json_feed = json_decode($json_data);

foreach ($json_feed[0]->jobs as $ip => $ipData) {
    echo "<br><b>IP Address: ". $ip . "</b><br>";
    foreach ($ipData as $data) {
        echo "Data: ". $data . "<br>";
    }
}
$json_data='[{“timestamp”:1456815458,“总就业人数”:6398,“最新就业人数”:99045,“就业人数”{“152.62.311.2:123:[8003,/Main:5.1/”,1655659260,1395047,“ec4.ap-souther-3.amazonaws.com”,“开普敦”,“澳大利亚/新南威尔士州”,“澳大利亚1511”,“亚马逊.com,Inc.”,183.215.34.58:9805:[56734],/JobPlace2.0/”,1455767214,1399047,“185.211.134.58”,“首尔”,“韩国”,57.5983,126.9783,“亚洲/首尔”,“AS32665”,“HCLC”]}}}}};
$json\u feed=json\u decode($json\u data);
foreach($json_feed[0]->jobs as$ip=>$ipData){
echo“
IP地址:“.$IP。”
”; foreach($ipData作为$data){ 回显“数据:.”数据“
”; } }
另外,我希望它在输出所有关于它的13条子信息之前输出“152.62.311.2:123”的IP地址本身。Op,然后编辑你的问题而不是评论。谢谢。现在剩下的就是如何首先获得IP地址?我尝试过这样做,但没有成功:echo$json_feed[0]->{'jobs'}[0];@C.H.不幸的是,由于数组键是IP地址本身,因此无法使用'jobs'[0]访问它.我更新了我的帖子,你可以循环浏览所有数据并将其打印出来,但我的大脑今天慢慢融化,所以解决方案不是很漂亮;;是的,我确实想循环浏览并打印所有信息。最后一部分循环浏览并回答了我的问题。谢谢!如果有更漂亮的方式,你的大脑会融化,请感受一下我想与大家分享。但至少我现在有了一些有效的方法。很高兴它能帮上忙,毫无疑问,比我更聪明的人会在某个时候出现,并有一个很好的解决方案,如果不是这样的话,我可能会在睡个好觉后明天再看一看。^^听起来不错。再次感谢。