0

我有以下 JSON 字符串

{
        "name":"Product",
        "properties":
        {
                "id":
                {
                        "type":"number",
                        "description":"Product identifier",
                        "required":true
                },
                "name":
                {
                        "type":"string",
                        "description":"Name of the product",
                        "required":true
                },
                "price":
                {
                        "type":"number",
                        "minimum":0,
                        "required":true
                },
                "tags":
                {
                        "type":"array",
                        "items":
                        {
                                "type":"string"
                        }
                },
                "stock":
                {
                        "type":"object",
                        "properties":
                        {
                                "warehouse":
                                {
                                        "type":"number"
                                },
                                "retail":
                                {
                                        "type":"number"
                                }
                        }
                }
        }
}    

我想访问

properties - > stock - > properties - > warehouse.

在 python 中,我可以执行以下操作。

f = open("c:/dir/jsondec.json")
data = json.load(f)
node = data['properties']['stock']['properties']['warehouse']
print str(node)

我正在尝试在 PHP 中做同样的事情。我知道我可以使用json_decode(),但正确的语法应该是什么。另外,如果我在里面有一个数组,properties-> ID我可以['properties'][0]['id']访问它。php中的等价物是什么?

4

3 回答 3

4

Python中的版本

这是在 Python 中:

f = open("c:/dir/jsondec.json")
data = json.load(f)
node = data['properties']['stock']['properties']['warehouse']
print str(node)

PHP 版本

这是它在 PHP 中的等价物:

$f = file_get_contents('c:/dir/jsondec.json');
$data = json_decode($f, true);
$node = $data['properties']['stock']['properties']['warehouse'];
echo $node;

“陷阱”(或“细微差别”)

但是有一个区别:f在 Python 版本中是打开的文件,而$f在 PHP 版本中已经是一个字符串。

正如 RPM 正确指出的那样,还有另一个区别:PHP 中的数组在Array字符串上下文中使用时会转换为字符串“”(请参阅​​此处:http: //ideone.com/XJfSP),因此您可能希望使用:

print_r($node);

或者

var_dump($node);

代替

echo $node;

查看数组的实际内容。

编辑:将结果更改json_decode()为数组。

于 2012-06-21T01:48:06.447 回答
0

尝试使用 json_decode 并将结果转换为对象。

$r = file_get_contents('json.json');

$jsonObj = (json_decode($r));

$warehouseObj = $jsonObj->properties->stock->properties->warehouse->type;

d($warehouseObj);//to view warehouse node
d($jsonObj);// toview complete object

function d($l){
print "<pre>";
print_r($l);
print "</pre>";
}
于 2012-06-21T01:46:27.940 回答
0

在 PHP 中,您可以使用json_decode将对象转换为关联数组。只要确保您TRUE作为函数中的第二个参数传递json_decode

   <?php
       $data = @file_get_contents('c:/xampp/htdocs/json.json');

      if(!$data)
      {
       echo "My bad";
      }
      $newData = json_decode($data,true);

      $a = $newData['properties']['stock']['properties']['warehouse'];

      print_r($a);
      echo $a['type'];

   ?>
于 2012-06-21T01:47:43.977 回答