1

私が作成した別のphp-apiからJSONstringを取得するphpでWebサイトを書いています。文字列は次のようになります。

{
    "result": "true",
    "results": {
        "20": {
            "id": "20",
            "desc": "a b ct tr",
            "active": "1",
            "startdate": "2013-04-03",
            "starttimehour": "18",
            "starttimemin": "0",
            "enddate": "2013-04-03",
            "endtimehour": "22",
            "endtimemin": "0",
            "creator": "a"
        },
        "21": {
            "id": "21",
            "desc": "test",
            "active": "0",
            "startdate": "2013-04-04",
            "starttimehour": "18",
            "starttimemin": "0",
            "enddate": "2013-04-04",
            "endtimehour": "22",
            "endtimemin": "0",
            "creator": "a"
        }
    }
}

JSONarray から情報を取得する方法について多くの回答を見つけましたが、ここでは配列を使用していません。問題は、20、21 などのラベルが付いたオブジェクトを取得するにはどうすればよいかということです (これらの番号はサーバーによって生成されるため、どの番号が返されるかわかりません)。

または、API が JSON を代わりに配列として返す方法を書き直す必要があります。このようなもの:

{"result"="true", "results":[{...},{...},{...}]}
4

4 に答える 4

2
$json = json_decode($json_string, True);
foreach($json['results'] as $key => $value) {
    // access the number with $key and the associated object with $value
    echo 'Number: '.$key;
    echo 'Startdate: '.$value['startdate'];
}
于 2013-04-05T11:41:21.807 に答える
0

次のように、パラメーターなしで POST によって json を取得していると思います

curl http://someapi.somedomain/someresource/ -X POST -d @data.json

だから基本的に

$data = file_get_contents('php://input');
$object = json_decode($data);
print_r($object);

あなたの問題を解決するはずです。$object は、投稿する json オブジェクトになります。

于 2013-04-05T11:45:17.643 に答える
0

JSON 応答を文字列として取得します。それがJSONの仕組みです。簡単にアクセスできる形式と構造にデータを「変換」するには、 という PHP 関数を使用できますjson_decode()

関数を使用する場合、2 つの選択肢があります。

  1. データを配列に変換します。json_decode($jsonString,true)
    この方法を使用すると、連想配列の場合と同じようにデータにアクセスできます。 $jsonArray['results']['21']

  2. データをオブジェクトに変換します。json_decode($jsonString)
    この方法では、オブジェクト表記を使用してデータをトラバースします。
    $num = 21;
    $jsonObj->results->$num

于 2013-04-05T11:47:08.270 に答える
0

最初に文字列 ($string) をデコードしてから、それをループしてオブジェクトのすべてのプロパティを取得できます。プロパティへのアクセスには、['prop'] ではなく ->prop を使用することに注意してください。この方法では、配列方式で処理する必要はありません。

$jsoned = json_decode($string);
    foreach($jsoned->results as $o) {
        foreach($o as $key => $value) {
            echo "The key is: ".$key." and the value is: ".$value."<br>";
        }
    }

印刷される作業例:

キー: id、値: 20

キー: desc、値: ab ct tr

キー: アクティブ、値: 1

等...

于 2013-04-05T11:53:56.057 に答える