Json_encode PHP数组将其解码为json字符串

时间:2014-02-03 10:48:30

标签: php json

我json_encode以下($ output)数组:

Array
(
[0] => Array
    (
        [month] => January 2014
        [posts] => 2
    )

[1] => Array
    (
        [month] => December 2013
        [posts] => 1
    )

[2] => Array
    (
        [month] => August 2013
        [posts] => 1
    )
)

<?php $json = json_encode($output); ?>
然后我将它打印到控制台进行检查:

<script>    
var myjson = <?php echo $json; ?>;
console.log(myjson);
</script>

在控制台中,'myjson'的形成如下:

[Object { month="January 2014", posts=2}, 
Object { month="December 2013", posts=1}, 
Object { month="August 2013", posts=1}] --------------------------($)

一组对象。而我需要它像:

[{
"Month": "Jan 2014",
"Posts": 2,
}, {
"Month": "Dec 2013",
"Posts": 1,
}, {
"Month": "Aug 2013",
"Posts": 1,
}];

一个json字符串。如果我能以某种方式删除'对象'语法而不是'=',那么就会有冒号,我很好。环顾这个网站 并尝试各种方法:

<?php
 $json = json_encode(array_values($output));
 $json = json_encode(array_values($output),true);
 $json = json_encode($output,true);
?>

我已经阅读过很多人遇到同样困难但所有解决方案本质上都非常具体。所以我的问题是, 给定任何二维数组我如何json_encode它以给我或在javascript中返回一个json字符串?

如果我通过http://jsonlint.com/运行($),则会返回:

Parse error on line 1:
[    Object{        url=
-----^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', ']'

4 个答案:

答案 0 :(得分:1)

事实上,它正在为您提供合适的JSON;然而,你在没有分隔符的情况下回应整个事情,所以它被解析了。如果您希望字符串文字作为字符串出现在控制台日志中,则将输出放在分隔符之间:

<script>
  var myjson = '<?php echo $json ?>';
  console.log(myjson);
</script>

答案 1 :(得分:0)

尝试parseJSON

<script>    
var myjson = $.parseJSON(<?php echo $json; ?>);
console.log(myjson);
</script>

答案 2 :(得分:0)

您可以使用Stringify

<script>    
    var myjson = JSON.stringify(<?= $json; ?>, null, 2);
    console.log(myjson);
</script>

答案 3 :(得分:0)

将“放在数组的键周围,例如;

而不是:

$output[][Month] = "January 2014"

型:

$output[]["Month"] = "January 2014"
$output[]["Posts"] = "2"

然后在接收json对象的程序中,你可以做一个循环..

for(var i=0;i<myArray.length;i++){
    var thisElement = myArray[i];
    myMonth = thisElement["Month"];
    myPosts = thisElement["Posts"];
 }

或者,如果你正在使用角度(就像我是我学习json格式的方式);

收到时;

$scope.MonthInfo = data

//on your html page
<div ng-repeat="monthLoop in MonthInfo"> {{monthLoop.Month}} {{monthLoop.Posts}}</div>

希望这有所帮助:)