2015.
07.
08
20:01:02
結論から書くと「json_decode()」関数を使って
とすればOKでした。
第二引数に「true」を指定すると、連想配列として取得できます。
第二引数にfalseを指定したり、省略した場合は、
アロー演算子(->)でアクセスする形になります。
それでは、詳細を書いていきます。
Twitterの自動投稿処理をPHPに行わせているのですが、
実は今まで、投稿結果をスルーしていました。
これを改良して、エラー発生時はメールを送信するようにしたかったのです。
ほんで、Twitterの自動投稿の結果がJSON形式で返ってくるので、
投稿結果をどうやってバラバラにするべな~?というのが今回のきっかけです。
まぁ、PHPさんのことだから一発変換できる関数とかあるでしょ。
あるよね?
ありますよね?
と期待を込めて調べたら、ありました(*´ェ`*)
その名も「json_decode()」関数です。
名前がそのまんまで素敵ですわぁ(人´∀`)
調べたところ、連想配列で取得したい場合は、
第二引数に「true」を指定するようです。
未指定時(もしくは「false」指定時)はアロー演算子でアクセスする形になります。
早速使ってみました。
というわけで、サンプルです。
まずは、普通にアロー演算子でアクセスする版φ(--)
実行結果は、こんなんなりましたφ(--)
結果はオブジェクトになっていますね。
試しに連想配列にアクセスするようにしてみるとφ(--)
怒られましたφ(--)
それでは、json_decode()の第二引数に「true」を指定して
連想配列として取得してみましょうφ(--)
今度は無事に取得できましたφ(--)
ちゃんと(連想)配列になっているようです。
アロー演算子でアクセスしてみるとφ(--)
スゴイ勢いで怒られましたφ(--)
そんな感じ\(--)/
……あっ、そうそう。
json_decodeの説明欄に
この関数は UTF-8 でエンコードされた文字列でのみ動作します。
と書いてありました。
私は試していませんが、UTF-8以外の環境で使いたい場合は、ご注意ください。
一旦UTF-8に変換してから使えってことでしょうね。
今度こそ、そんな感じ\(--)/
$ary_data = json_decode($json_data, true);
とすればOKでした。
第二引数に「true」を指定すると、連想配列として取得できます。
第二引数にfalseを指定したり、省略した場合は、
アロー演算子(->)でアクセスする形になります。
それでは、詳細を書いていきます。
Twitterの自動投稿処理をPHPに行わせているのですが、
実は今まで、投稿結果をスルーしていました。
これを改良して、エラー発生時はメールを送信するようにしたかったのです。
ほんで、Twitterの自動投稿の結果がJSON形式で返ってくるので、
投稿結果をどうやってバラバラにするべな~?というのが今回のきっかけです。
まぁ、PHPさんのことだから一発変換できる関数とかあるでしょ。
あるよね?
ありますよね?
と期待を込めて調べたら、ありました(*´ェ`*)
その名も「json_decode()」関数です。
名前がそのまんまで素敵ですわぁ(人´∀`)
調べたところ、連想配列で取得したい場合は、
第二引数に「true」を指定するようです。
未指定時(もしくは「false」指定時)はアロー演算子でアクセスする形になります。
早速使ってみました。
というわけで、サンプルです。
まずは、普通にアロー演算子でアクセスする版φ(--)
<?php
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
$ary_data = json_decode($json_data);
var_dump($ary_data);
print $ary_data->key1 . "\n";
print $ary_data->key2->key2_2 . "\n";
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
$ary_data = json_decode($json_data);
var_dump($ary_data);
print $ary_data->key1 . "\n";
print $ary_data->key2->key2_2 . "\n";
実行結果は、こんなんなりましたφ(--)
object(stdClass)#1 (2) {
["key1"]=>
string(6) "value1"
["key2"]=>
object(stdClass)#2 (3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
value1
value2_2
["key1"]=>
string(6) "value1"
["key2"]=>
object(stdClass)#2 (3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
value1
value2_2
結果はオブジェクトになっていますね。
試しに連想配列にアクセスするようにしてみるとφ(--)
<?php
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
$ary_data = json_decode($json_data);
var_dump($ary_data);
//print $ary_data->key1 . "\n";
//print $ary_data->key2->key2_2 . "\n";
print $ary_data["key1"] . "\n";
print $ary_data["key2"]["key2_2"] . "\n";
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
$ary_data = json_decode($json_data);
var_dump($ary_data);
//print $ary_data->key1 . "\n";
//print $ary_data->key2->key2_2 . "\n";
print $ary_data["key1"] . "\n";
print $ary_data["key2"]["key2_2"] . "\n";
怒られましたφ(--)
object(stdClass)#1 (2) {
["key1"]=>
string(6) "value1"
["key2"]=>
object(stdClass)#2 (3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
PHP Fatal error: Cannot use object of type stdClass as array in C:\test\test01.
php on line 11
Fatal error: Cannot use object of type stdClass as array in C:\test\test01.php o
n line 11
["key1"]=>
string(6) "value1"
["key2"]=>
object(stdClass)#2 (3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
PHP Fatal error: Cannot use object of type stdClass as array in C:\test\test01.
php on line 11
Fatal error: Cannot use object of type stdClass as array in C:\test\test01.php o
n line 11
それでは、json_decode()の第二引数に「true」を指定して
連想配列として取得してみましょうφ(--)
<?php
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
//$ary_data = json_decode($json_data);
$ary_data = json_decode($json_data, true);
var_dump($ary_data);
//print $ary_data->key1 . "\n";
//print $ary_data->key2->key2_2 . "\n";
print $ary_data["key1"] . "\n";
print $ary_data["key2"]["key2_2"] . "\n";
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
//$ary_data = json_decode($json_data);
$ary_data = json_decode($json_data, true);
var_dump($ary_data);
//print $ary_data->key1 . "\n";
//print $ary_data->key2->key2_2 . "\n";
print $ary_data["key1"] . "\n";
print $ary_data["key2"]["key2_2"] . "\n";
今度は無事に取得できましたφ(--)
array(2) {
["key1"]=>
string(6) "value1"
["key2"]=>
array(3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
value1
value2_2
["key1"]=>
string(6) "value1"
["key2"]=>
array(3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
value1
value2_2
ちゃんと(連想)配列になっているようです。
アロー演算子でアクセスしてみるとφ(--)
<?php
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
//$ary_data = json_decode($json_data);
$ary_data = json_decode($json_data, true);
var_dump($ary_data);
print $ary_data->key1 . "\n";
print $ary_data->key2->key2_2 . "\n";
//print $ary_data["key1"] . "\n";
//print $ary_data["key2"]["key2_2"] . "\n";
$json_data = '{"key1":"value1","key2":{"key2_1":"value2_1", "key2_2":"value2_2", "key2_3":"value2_3"}}';
//$ary_data = json_decode($json_data);
$ary_data = json_decode($json_data, true);
var_dump($ary_data);
print $ary_data->key1 . "\n";
print $ary_data->key2->key2_2 . "\n";
//print $ary_data["key1"] . "\n";
//print $ary_data["key2"]["key2_2"] . "\n";
スゴイ勢いで怒られましたφ(--)
array(2) {
["key1"]=>
string(6) "value1"
["key2"]=>
array(3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
PHP Notice: Trying to get property of non-object in C:\test\test01.php on line
10
Notice: Trying to get property of non-object in C:\test\test01.php on line 10
PHP Notice: Trying to get property of non-object in C:\test\test01.php on line
11
Notice: Trying to get property of non-object in C:\test\test01.php on line 11
PHP Notice: Trying to get property of non-object in C:\test\test01.php on line
11
Notice: Trying to get property of non-object in C:\test\test01.php on line 11
["key1"]=>
string(6) "value1"
["key2"]=>
array(3) {
["key2_1"]=>
string(8) "value2_1"
["key2_2"]=>
string(8) "value2_2"
["key2_3"]=>
string(8) "value2_3"
}
}
PHP Notice: Trying to get property of non-object in C:\test\test01.php on line
10
Notice: Trying to get property of non-object in C:\test\test01.php on line 10
PHP Notice: Trying to get property of non-object in C:\test\test01.php on line
11
Notice: Trying to get property of non-object in C:\test\test01.php on line 11
PHP Notice: Trying to get property of non-object in C:\test\test01.php on line
11
Notice: Trying to get property of non-object in C:\test\test01.php on line 11
そんな感じ\(--)/
……あっ、そうそう。
json_decodeの説明欄に
この関数は UTF-8 でエンコードされた文字列でのみ動作します。
と書いてありました。
私は試していませんが、UTF-8以外の環境で使いたい場合は、ご注意ください。
一旦UTF-8に変換してから使えってことでしょうね。
今度こそ、そんな感じ\(--)/