PHP数组被输出为JSON格式

时间:2011-10-09 06:00:46

标签: php json

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\"}"}内容

6 个答案:

答案 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"}}

是你想要的吗?

REFERENCE