私はPHPを使用してJSONファイルを解析しようとしました。しかし、私は今立ち往生しています。
これは私のJSONファイルの内容です:
{
"John": {
"status":"Wait"
},
"Jennifer": {
"status":"Active"
},
"James": {
"status":"Active",
"age":56,
"count":10,
"progress":0.0029857,
"bad":0
}
}
これが私がこれまでに試したことです。
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);
echo $json_a['John'][status];
echo $json_a['Jennifer'][status];
しかし、私は名前('John'
、'Jennifer'
のような)と利用可能なすべてのキーと値('age'
、'count'
のような)を前もって知らないので、foreachループを作成する必要があると思います。
私はこれのための例をいただければ幸いです。
多次元配列を反復処理するには、 RecursiveArrayIterator を使用します。
$jsonIterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator(json_decode($json, TRUE)),
RecursiveIteratorIterator::SELF_FIRST);
foreach ($jsonIterator as $key => $val) {
if(is_array($val)) {
echo "$key:\n";
} else {
echo "$key => $val\n";
}
}
出力:
John:
status => Wait
Jennifer:
status => Active
James:
status => Active
age => 56
count => 10
progress => 0.0029857
bad => 0
JSONを正しく読まずに多くの人が答えを投稿しているとは思えません。
$json_a
を単独で反復処理すると予測した場合、オブジェクトのオブジェクトがあります。 2番目のパラメータとしてtrue
を渡しても、2次元配列になります。最初の次元をループしているのであれば、2番目の次元をそのままエコーすることはできません。だからこれは間違っています:
foreach ($json_a as $k => $v) {
echo $k, ' : ', $v;
}
各人の状態を反映するには、これを試してください。
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);
foreach ($json_a as $person_name => $person_a) {
echo $person_a['status'];
}
?>
最もエレガントな解決策:
$shipments = json_decode(file_get_contents("shipments.js"), true);
print_r($shipments);
JsonファイルはBOMなしでUTF-8でエンコードする必要があることを忘れないでください。ファイルにBOMがある場合、json_decodeはNULLを返します。
あるいは
$shipments = json_encode(json_decode(file_get_contents("shipments.js"), true));
echo $shipments;
試します
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a=json_decode($string,true);
foreach ($json_a as $key => $value){
echo $key . ':' . $value;
}
?>
あなたの最初の「タグ」が間違っていることをだれも指摘していないのは、私をはるかに超えています。あなたは{}でオブジェクトを作成していますが、[]で配列を作成することができます。
[ // <-- Note that I changed this
{
"name" : "john", // And moved the name here.
"status":"Wait"
},
{
"name" : "Jennifer",
"status":"Active"
},
{
"name" : "James",
"status":"Active",
"age":56,
"count":10,
"progress":0.0029857,
"bad":0
}
] // <-- And this.
この変更により、JSONはオブジェクトではなく配列として解析されます。そしてその配列を使えば、ループなどのように、あなたが望むことなら何でもすることができます。
これを試して
$json_data = '{ "John": { "status":"Wait" }, "Jennifer": { "status":"Active" }, "James": { "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0 } }'; $decode_data = json_decode($json_data); foreach($decode_data as $key=>$value){ print_r($value); }
試してください:
$string = file_get_contents("/home/michael/test.json");
$json = json_decode($string, true);
foreach ($json as $key => $value) {
if (!is_array($value)) {
echo $key . '=>' . $value . '<br />';
} else {
foreach ($value as $key => $val) {
echo $key . '=>' . $val . '<br />';
}
}
}
より標準的な答え:
$jsondata = file_get_contents(PATH_TO_JSON_FILE."/jsonfile.json");
$array = json_decode($jsondata,true);
foreach($array as $k=>$val):
echo '<b>Name: '.$k.'</b></br>';
$keys = array_keys($val);
foreach($keys as $key):
echo ' '.ucfirst($key).' = '.$val[$key].'</br>';
endforeach;
endforeach;
そして出力は次のとおりです。
Name: John
Status = Wait
Name: Jennifer
Status = Active
Name: James
Status = Active
Age = 56
Count = 10
Progress = 0.0029857
Bad = 0
キーと値のペアとしてforeach
ループを使用してJSONをループスルーします。さらにループを行う必要があるかどうかを判断するために型チェックを行います。
foreach($json_a as $key => $value) {
echo $key;
if (gettype($value) == "object") {
foreach ($value as $key => $value) {
# and so on
}
}
}
<?php
$json = '{
"response": {
"data": [{"identifier": "Be Soft Drinker, Inc.", "entityName": "BusinessPartner"}],
"status": 0,
"totalRows": 83,
"startRow": 0,
"endRow": 82
}
}';
$json = json_decode($json, true);
//echo '<pre>'; print_r($json); exit;
echo $json['response']['data'][0]['identifier'];
$json['response']['data'][0]['entityName']
echo $json['response']['status'];
echo $json['response']['totalRows'];
echo $json['response']['startRow'];
echo $json['response']['endRow'];
?>
それを試してみてください:
foreach ($json_a as $key => $value)
{
echo $key, ' : ';
foreach($value as $v)
{
echo $v." ";
}
}
JSON文字列をデコードすると、オブジェクトが得られます。配列ではありません。だからあなたが得ている構造を見るための最良の方法は、デコードのvar_dumpを作ることです。 (このvar_dumpは、主に複雑な場合に構造を理解するのに役立ちます)。
<?php
$json = file_get_contents('/home/michael/test.json');
$json_a = json_decode($json);
var_dump($json_a); // just to see the structure. It will help you for future cases
echo "\n";
foreach($json_a as $row){
echo $row->status;
echo "\n";
}
?>
すべてのJSON値をエコーする最も簡単な方法は、ループインループを使用することです。最初のループはすべてのオブジェクトを取得し、2番目のオブジェクトは値を取得します。
foreach($data as $object) {
foreach($object as $value) {
echo $value;
}
}
$json_a = json_decode($string, TRUE);
$json_o = json_decode($string);
foreach($json_a as $person => $value)
{
foreach($value as $key => $personal)
{
echo $person. " with ".$key . " is ".$personal;
echo "<br>";
}
}