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;

「落とし穴」(または「わずかな違い」)

ただし、違いが 1 つありfます。Python バージョンではファイルが開かれています$fが、PHP バージョンではすでに文字列です。

RPM が正しく指摘しているように、もう 1 つの違いがあります。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関数の 2 番目の引数として渡すことを確認してください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 に答える