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