PHP数组可以输出为JSON格式
PHP数组PHP数组可以输出为JSON格式,php,json,Php,Json,PHP数组 $grades = array( array( name => "tom", grade => 'A' ), array( name => "jeff", grade=> 'B' ), array( name => "lisa",
$grades = array( array( name => "tom",
grade => 'A'
),
array( name => "jeff",
grade=> 'B'
),
array( name => "lisa",
grade => 'C'
)
);
$output=array
( 'status'=>'ok',
'content'=>$grades
)
我想看到的最后一个JSON输出是{“status”:“ok”,“content”:“{“tom”:“A”,“jeff”:“B”,“lisa”:“B”}
问题是我应该如何操作数组,以便它可以像上面的JSON一样提供最终输出?
将json_编码($output);echo$输出
有什么诀窍吗?
或我必须做什么
json\u编码($grades)
然后另一个json\u编码($output)
但是我看到了额外的\
像{“状态”:1,“内容”:“{“汤姆”:“A\”,“杰夫”:“B\”,“丽莎”:“B\”}
你得到“额外”的原因是你所说的输出不是有效的json。PHP的默认函数是正确的,您的函数不会在JSON解析器中解析
如果你真的想要几乎是json,你就必须自己动手。在
json\u encode($output)
之前不要调用json\u encode($grades)
,除非你有一些未提及的理由想要将等级作为字符串文本而不是json对象json_encode()
将递归编码$output
中的所有子数组,无需单独编码。我不明白您为什么不这样写:
<?php
$grades = array(
array(
'name' => 'tom',
'grade' => 'A'
),
array(
'name' => 'jeff',
'grade' => 'B'
),
array(
'name' => 'lisa',
'grade' => 'C'
),
);
$output = array(
'status' => 'ok',
'content' => $grades,
);
print_r(json_decode(json_encode($output)));
这不是预期的结果吗?您必须更改
$grade
数组的格式才能获得所需的输出。试试下面
$grade_format= array();
foreach($grades as $k=>$v)
{
//array_push($output,$k);
$grade_format[$v['name']]=$v['grade'];
}
//echo "<pre>";
//print_r($grade_format);
$output=array
( 'status'=>'ok',
'content'=>$grade_format
);
echo "<pre>";
echo json_encode($output,JSON_FORCE_OBJECT);
//output would be
{"status":"ok","content":{"tom":"A","jeff":"B","lisa":"C"}}
$grade_format=array();
foreach($k=>v)
{
//数组_push($output,$k);
$grade_格式[$v['name']]=$v['grade'];
}
//回声“;
//打印(分级格式);
$output=array
(“状态”=>“正常”,
“内容”=>$grade\U格式
);
回声“;
echo json_encode($output,json_FORCE_OBJECT);
//产出将是
{“状态”:“确定”,“内容”:{“汤姆”:“A”,“杰夫”:“B”,“丽莎”:“C”}
这是你想要的吗
正如您可能已经了解到的,数组的关联键在生成的JSON对象中表示为键,例如,{key1:value1,…},从您得到的输出中可以清楚地看出。
其次,包含其他数组的数组将用JSON表示为列表,例如[…] 我相信您以前的代码应该是这样的:
$grades = array(
'tom' => 'A',
'jeff' => 'B',
'lisa' => 'B',
);
$output = array(
'status' => 'ok',
'content' => $grades
);
echo json_encode($output);
因此,应用我上面概述的规则将产生下面的JSON
{"status":"ok","content":{"tom":"A","jeff":"B","lisa":"B"}}
我个人认为你应该使用它,因为它比你想要的更好。但是,下面的代码应该会给出您的结果
$my_array = [
"test" => "value",
"another" => [
"fruits" => ["Apple", "Orange"]
]
];
print_r(json_encode($my_array));
输出:
{
"test":"value",
"another":{
"fruits":["Apple","Orange"]
}
}
试试这个简单的命令 它将产生
你为什么不试试看会发生什么?我试过了,但没能得到我想看到的最终结果。你真的想让内容成为一个引用的对象文字吗?也许你真的希望它是一个对象?你的意思是没有标准的方法来查看{“状态”:“ok”,“内容”:“{“tom”:“A”,“jeff”:“B”,“lisa”:“B”}”}?不。在JavaScript中,引号必须在引号内转义。你想要的是一个语法错误。@lilzz不,有一个标准的方法——PHP编码的方法。我是说,你想要的编码方式是模棱两可的。
{"status":"ok","content":{"tom":"A","jeff":"B","lisa":"B"}}
$my_array = [
"test" => "value",
"another" => [
"fruits" => ["Apple", "Orange"]
]
];
print_r(json_encode($my_array));
{
"test":"value",
"another":{
"fruits":["Apple","Orange"]
}
}