在PHP中读取JSON文件

时间:2014-05-11 16:25:02

标签: php json

我试过这段代码

$jsonlogcontents='{"buildings":"townhall","Army":{ "Paladins":{ "325648":0, "546545":4 }, "Knights":{ "325648":-2, "546545":0 } } }';
$phpArray = json_decode($jsonlogcontents, false);
echo $phpArray->buildings;
echo $phpArray->Army;

这只是我的代码示例,JSON文件太大而无法包含并且包含敏感信息。我遇到的问题是我无法获得价值或打印

的价值
  

$ phpArray->陆军

它给了我一个错误。然而,我可以打印或获得

的值
  

$ phpArray->建筑物

我认为当您在PHP中解码JSON文件/内容时,您无法获取/打印/存储“'密钥”的值。其中包含更多信息(更多{和})或括号。您只能打印/获取价值仅包含1个值的关键值。

如果是这种情况,我该怎么做才能获得包含更多JSON代码的密钥的内容。另外,如何将包含更多JSON信息的密钥的内容转换为字符串?转换是这样我可以显示该键的值到页面或回显它

3 个答案:

答案 0 :(得分:0)

当您将false作为第二个参数添加到json_encode时,它会将所有数组更新为sdClass个空对象。这样您就可以将主数组作为对象< / p>

<?php

$json = '{
    "buildings": "townhall",
    "Army": {
        "Paladins": {
            "325648": 0,
            "546545": 4
        },
        "Knights": {
            "325648": -2,
            "546545": 0
        }
    }
}';

$array = json_decode($json, true);
$object = (object)$array;

var_dump($object->Army);


?>

<强>输出

array(2) {
  ["Paladins"]=>
  array(2) {
    [325648]=>
    int(0)
    [546545]=>
    int(4)
  }
  ["Knights"]=>
  array(2) {
    [325648]=>
    int(-2)
    [546545]=>
    int(0)
  }
}

<强> Working Demo

答案 1 :(得分:0)

错误是因为Army是一个对象,echo不知道如何将其转换为字符串进行显示。使用:

print_r($phpArray->Army);

或:

var_dump($phpArray->Army);

查看其内容。

P.S。 $phpArray不是数组而是对象。

  

对于陆军来说,我需要为此做另一个json_decode()。

你没有。 json_decode()在一次调用中将整个结构解码为一个大对象(或数组)。无论数据的嵌套程度如何,您只需拨打json_decode()一次即可完成。这就是为什么陆军不再是JSON字符串了。

答案 2 :(得分:-1)

这是因为json_decode的输出如下所示:

object(stdClass)(
  'buildings' => 'townhall',
  'Army' => object(stdClass)(
    'Paladins' => object(stdClass)(
      325648 => 0,
      546545 => 4
    ),
    'Knights' => object(stdClass)(
      325648 => -2,
      546545 => 0
    )
  )
)

陆军是一个标准物体,所以它不知道如何回应它。但是你可以var_dump它:

var_dump($phpArray->Army);

最简单的解决方案是将其视为普通数组:

$phpArray = json_decode($jsonlogcontents, true);