使用PHP和JS从URL解析JSON

时间:2017-02-25 17:29:25

标签: javascript php jquery html json

我收到一个带有来自URL的数据的json(这是芹菜的插件)。样品:

{
  "celery@s1": {
    "scheduled": [],
    "stats": {
      "clock": "2535550",
      "pid": 26002,
      "broker": {
        "transport_options": {},
        "login_method": "AMQPLAIN",
        "hostname": "127.0.0.1",
        "alternates": []
      },
      "prefetch_count": 8,
      "total": {
        "stone": 2602,
        "wood": 34
      }...

我尝试解析它并使用PHP和JS制作自定义统计页面。

用PHP解析:

<?php 
$url = 'http://127.0.0.1:5555/api/workers';
$content = file_get_contents($url);
$json = json_decode($content, true);

foreach($json['celery@s1']['stats']['total'] as $item) {
    echo json_encode($item['wood']);
}

?>

使用更新计时器从PHP脚本获取数据的JS:

function getFromFile() {
    $.get("s_updater.php",function(response) {
        response = JSON.parse(response);
        console.log(response)
        $("#field-1").html(response);
    });
}

$(document).ready(function() {
    var period = 1000;
    getFromFile();
    var per = setInterval(function() {
        getFromFile();
    }, period);
});

但看起来我在某个地方犯了错误,现在我被卡住了。有没有更好的方法来做到这一点? 我想要的只是获得“wood”:来自URL的json的34,并在html页面上显示值。

2 个答案:

答案 0 :(得分:1)

$json = json_decode($content, true);

 echo $json['celery@s1']['stats']['total']['wood'];

您不必使用循环或JSON来发送单个值,只需回显它。

JS代码

function getFromFile() {
    $.get("s_updater.php",function(response) {
        console.log(response)
        $("#field-1").html(response);
    });
}

答案 1 :(得分:1)

TL; DR要获得木材价值,您需要通过$json['celery@s1']['stats']['total']['wood']

访问它

当您迭代$json['celery@s1']['stats']['total']时,您将获得两个$item,但这些项目是整数,而不是数组:2602用于石头,34用于木材。 PHP应该注意到你。

如果你做了

,可以更多地想象它
foreach($json['celery@s1']['stats']['total'] as $key => $item) {
    echo $key.': '.$item;
}

你会得到:

  石头:2602

     木材:31

要获得木材价值,您只需执行$json['celery@s1']['stats']['total']['wood']并将其解码为json或将其输出为数字。当你把它作为数字回应时,不要指望JS方面的json。