如何使用PHP解析JSON文件?

如何使用PHP解析JSON文件?,php,json,Php,Json,我尝试使用PHP解析JSON文件。但我现在被卡住了 这是我的JSON文件的内容: { “约翰”:{ “状态”:“等待” }, “詹妮弗”:{ “状态”:“活动” }, “詹姆斯”:{ “状态”:“活动”, “年龄”:56岁, “计数”:10, “进度”:0.0029857, “坏”:0 } } 这就是我迄今为止所尝试的: 试试看 使用foreach循环作为键值对在JSON中循环。执行类型检查以确定是否需要执行更多循环 foreach($json_a as $key => $value)

我尝试使用PHP解析JSON文件。但我现在被卡住了

这是我的JSON文件的内容:

{
“约翰”:{
“状态”:“等待”
},
“詹妮弗”:{
“状态”:“活动”
},
“詹姆斯”:{
“状态”:“活动”,
“年龄”:56岁,
“计数”:10,
“进度”:0.0029857,
“坏”:0
}
}
这就是我迄今为止所尝试的:

试试看


使用
foreach
循环作为键值对在JSON中循环。执行类型检查以确定是否需要执行更多循环

foreach($json_a as $key => $value) {
    echo $key;
    if (gettype($value) == "object") {
        foreach ($value as $key => $value) {
          # and so on
        }
    }
}

我不敢相信这么多人在没有正确阅读JSON的情况下发布答案

如果您单独使用foreach iterate
$json\u a
,您就拥有了一个对象对象。即使您传入
true
作为第二个参数,您也有一个二维数组。如果你在第一维度上循环,你不能像那样重复第二维度。所以这是错误的:

foreach ($json_a as $k => $v) {
   echo $k, ' : ', $v;
}
要回显每个人的状态,请尝试以下操作:

<?php

$string = file_get_contents("/home/michael/test.json");
if ($string === false) {
    // deal with error...
}

$json_a = json_decode($string, true);
if ($json_a === null) {
    // deal with error...
}

foreach ($json_a as $person_name => $person_a) {
    echo $person_a['status'];
}

?>

要迭代多维数组,可以使用

输出:

John:
status => Wait
Jennifer:
status => Active
James:
status => Active
age => 56
count => 10
progress => 0.0029857
bad => 0

你必须这样给予:

echo  $json_a['John']['status']; 

echo "<>"

echo  $json_a['Jennifer']['status'];

br inside <>
试试看:

foreach ($json_a as $key => $value)
 {
   echo $key, ' : ';
   foreach($value as $v)
   {
       echo $v."  ";
   }
}
尝试:

$string=file\u get\u contents(“/home/michael/test.json”);
$json=json_decode($string,true);
foreach($json作为$key=>$value){
如果(!是_数组($value)){
回显$key.'=>'.$value.'
'; }否则{ foreach($key=>$val的值){ 回显$key.'=>'.$val.
; } } }
解码json字符串时,将得到一个对象。不是数组。因此,查看您得到的结构的最佳方法是对解码进行var_转储。(这个var_转储可以帮助您理解结构,主要是在复杂的情况下)


$json\u a=json\u decode($string,TRUE);
$json\u o=json\u decode($string);
foreach($json\u作为$person=>$value)
{
foreach($key=>$personal的值)
{
echo$person.“..$key.”是“..$personal;
回声“
”; } }
最优雅的解决方案:

$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;

我完全无法理解,没有人指出你开始的“标签”是错误的。您正在使用{}创建一个对象,而您可以使用[]创建一个数组

[ // <-- 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值的最快方法是使用循环中的循环,第一个循环将获取所有对象,第二个循环获取值

foreach($data as $object) {

        foreach($object as $value) {

            echo $value;

        }

    }
更标准的答案:

$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 '&nbsp;'.ucfirst($key).' = '.$val[$key].'</br>';
    endforeach;
endforeach;
试试这个

$json\u data='0{
“约翰”:{
“状态”:“等待”
},
“詹妮弗”:{
“状态”:“活动”
},
“詹姆斯”:{
“状态”:“活动”,
“年龄”:56岁,
“计数”:10,
“进度”:0.0029857,
“坏”:0
}
}';
$decode\u data=json\u decode($json\u data);
foreach($key=>$value解码_数据){
打印(价值);
}

我在
PHP
中使用下面的代码将json转换为数组, 如果JSON有效,则
JSON\u decode()
工作正常,并将返回一个数组, 但如果JSON格式不正确,它将返回
NULL

<?php
function jsonDecode2($json){
    $arr = (array) json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return an empty array()
var_dump( jsonDecode2($json) );
?>

如果在JSON格式错误的情况下,您只需要数组,那么您可以使用此函数

<?php
function jsonDecode3($json){
    $arr = (array) json_decode($json, true);

    if(empty(json_last_error())){
        return $arr;
    }
    else{
        throw new ErrorException( json_last_error_msg() );
    }
}

// In case of malformed JSON, Fatal error will be generated
var_dump( jsonDecode3($json) );
?>

如果在JSON格式错误的情况下,您希望停止代码执行,那么您可以使用此函数

<?php
function jsonDecode3($json){
    $arr = (array) json_decode($json, true);

    if(empty(json_last_error())){
        return $arr;
    }
    else{
        throw new ErrorException( json_last_error_msg() );
    }
}

// In case of malformed JSON, Fatal error will be generated
var_dump( jsonDecode3($json) );
?>


foreach的语法是正确的。请查找foreach的语法(您应该会得到键和值)。不要放弃!@Stefan Mai:
foreach($key=>variable$val)
应该是你想要的:-)@JamWaffles哈哈,谢谢。我希望OP能获得一些查找它的经验。向上投票,因为这是他/她真正需要的。旁注:我建议你配置你的PHP设置以显示所有类型的错误消息,包括
通知
你能详细说明你试图从“解析”中得到什么吗JSON:即,您试图用代码完成什么任务(如:“输出所有状态”、“查找状态为xyz的名称”、“查找xyz的所有信息”)?或者更好的是,事先知道结构是什么。这种方法比好的旧foreach有什么特别的优势吗?@阿尔瓦罗显然。使用foreach,你只能递归一个层次的深度。使用上述方法,你可以递归多层数组。此外,整个过程都封装在OOP中,因此你有更好的重用性,并且可以轻松地在UnitTests中模拟它,您可以将迭代器与其他迭代器堆叠在一起,执行不同的操作,如限制、缓存、筛选等。除了您可能要创建的任何自定义迭代器之外。好的,我没有考虑到嵌套级别是可变的。在这种情况下,这比递归函数更简洁。不过,这种类型的解析例如,
{'John':{'status':{'waiting','Mary':{'status','nested'},'Suzy':{'status:'waiting'}
{'John':{'status':'waiting'},'Mary':{'status','nested'},'Suzy':{'status:'waiting'}没有区别
Mary
John
的一个结构性孩子,但她丢失了。@Jesse会让你检测深度。你好,这可能很好地解决了这个问题……但是如果你能编辑你的答案,并提供一点关于它如何工作以及为什么工作的解释,那就太好了:)别忘了-堆栈溢出上有很多新手,还有他们可以从你的专业知识中学到一两件事——对你来说显而易见的东西对他们来说可能不是这样。非常棒,但是整个物料清单(BOM)这件事把我完全弄糊涂了。呃……你在说什么?我是唯一一个对使用神秘的、无法解释的缩写感到恼火的人吗?可以使用缩写,但请在首次使用时解释一下(WFU)……谢谢。BOM=字节顺序标记。如果你在mac和pc上使用json,典型的问题是,因为它们使用不同的默认文本
[ // <-- 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.
foreach($data as $object) {

        foreach($object as $value) {

            echo $value;

        }

    }
$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 '&nbsp;'.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
<?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']; 

?>
<?php
function jsonDecode1($json){
    $arr = json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return NULL
var_dump( jsonDecode1($json) );
?>
<?php
function jsonDecode2($json){
    $arr = (array) json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return an empty array()
var_dump( jsonDecode2($json) );
?>
<?php
function jsonDecode3($json){
    $arr = (array) json_decode($json, true);

    if(empty(json_last_error())){
        return $arr;
    }
    else{
        throw new ErrorException( json_last_error_msg() );
    }
}

// In case of malformed JSON, Fatal error will be generated
var_dump( jsonDecode3($json) );
?>