Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组可以输出为JSON格式_Php_Json - Fatal编程技术网

PHP数组可以输出为JSON格式

PHP数组可以输出为JSON格式,php,json,Php,Json,PHP数组 $grades = array( array( name => "tom", grade => 'A' ), array( name => "jeff", grade=> 'B' ), array( name => "lisa",

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_编码($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"]
    }
}