PHP数组
$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_encode($output); echo $output
做诀窍吗?
或
我必须做吗
json_encode($grades)
然后是另一个json_encodes($output)
,但我看到\
{"status":1,"content":"{\"tom\":\"A\",\"jeff\":\"B\",\"lisa\":\"B\"}"}
内容
答案 0 :(得分:3)
我不明白为什么你不写这个:
<?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)));
打印:
stdClass Object
(
[status] => ok
[content] => Array
(
[0] => stdClass Object
(
[name] => tom
[grade] => A
)
[1] => stdClass Object
(
[name] => jeff
[grade] => B
)
[2] => stdClass Object
(
[name] => lisa
[grade] => C
)
)
)
不是预期的结果吗?
答案 1 :(得分:2)
不要在json_encode($grades)
之前调用json_encode($output)
,除非您有一些未提及的理由要求将成绩作为字符串文字而不是json对象。 json_encode()
将递归编码$output
内的所有子数组,不需要单独编码。
答案 2 :(得分:2)
尝试这个简单的命令
$my_array = [
"test" => "value",
"another" => [
"fruits" => ["Apple", "Orange"]
]
];
print_r(json_encode($my_array));
它会产生
{
"test":"value",
"another":{
"fruits":["Apple","Orange"]
}
}
答案 3 :(得分:1)
正如您可能已经想到的那样,数组的关联键在结果JSON对象中表示为键,例如 {key1:value1,...} ,从你得到的输出中清楚地证明了这一点 其次,包含其他数组的数组将表示为JSON中的列表,例如的 [...] 强> 我相信你的早期代码应该是这样的:
$grades = array(
array('name' => 'tom', 'grade' => 'A'),
array('name' => 'jeff', 'grade' => 'B'),
array('name' => 'lise', 'grade' => 'C'),
);
$output = array(
'status' => 'ok',
'content' => $grades
);
echo json_encode($output);
因此,应用上面列出的规则将导致下面的JSON。
{"status":"ok","content":[{"name":"tom","grade":"A"},{"name":"jeff","grade":"B"},{"name":"lise","grade":"C"}]}
我个人认为你应该使用它,因为它比你想要的更好。但是,下面的代码应该会为您提供结果。
$grades = array(
'tom' => 'A',
'jeff' => 'B',
'lisa' => 'B',
);
$output = array(
'status' => 'ok',
'content' => $grades
);
echo json_encode($output);
输出:
{"status":"ok","content":{"tom":"A","jeff":"B","lisa":"B"}}
答案 4 :(得分:0)
你获得'额外'\的原因是你想要的输出是无效的JSON。 PHP的默认函数是正确的,你的不会在JSON解析器中解析。
如果你真的想要几乎json,那么你必须自己动手。
答案 5 :(得分:0)
您必须更改$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"}}
是你想要的吗?