php:使用文件_get_content在php中读取json数据

时间:2013-02-17 13:10:03

标签: php jquery json

我正在尝试从php文件中读取json数据。这是我的代码。

category-query.php(这是我的json数据)

<script>
var json_data = 
[
                /*
                !please notice
                you can add the category name SpecialFeature, 
                but it will be igone in the main menu
                */
                //cat 1
                {
                        "categoryName"      : "Dishes",  
                        "categoryImageUrl"  : "cat_01.jpg" ,
                        "categoryRootMenu"  : false ,
                        "categoryStyle" : "one"
                },
                //cat 2
                {
                        "categoryName"          : "Dessert",  
                        "categoryImageUrl"  : "cat_02.jpg" ,
                        "categoryRootMenu"  : false ,
                        "categoryStyle" : "two"

                },
                //cat 3
                {
                        "categoryName"          : "Dimsum",  
                        "categoryImageUrl"  : "cat_04.jpg" ,
                        "categoryRootMenu"  : false ,
                        "categoryStyle" : "submenu"

                }   ]

以下是我在索引.php上所做的事情,以阅读上述值

    $get_category = file_get_contents("res3/resproj-data/category-query.php");
                        $decode = json_decode($get_category);
                        print $decode;
                        ?>

遗憾的是,我无法在$decode变量中获得这些值,请告诉我如何阅读这些值

5 个答案:

答案 0 :(得分:1)

您的文件内容不是JSON;它们看起来像是通过<script>包含JavaScript代码的HTML。

为了json_decode处理数据,需要删除两个第一行:

<script>
var json_data = 

完全不清楚为什么您的文件有.php扩展名,或者为什么需要包含JavaScript代码。如果此数据文件与应用的其他部分之间存在交互,则应在问题中提及。

答案 1 :(得分:0)

如果你得到一个结构良好的JSON脚本,我想你想在php中有一个关联数组,所以使用:json_decode($datas,true);。 然后测试你的数组是否被很好地解析,它不是你想要使用的“打印”,而是var_dump。 除了显示它之外,如果你想遍历它,请使用foreach循环。

如果你没有像Jon想的那样得到格式良好的JSON,请查看你的脚本。

答案 2 :(得分:0)

一个简单的解决方案允许您只使用PHP。 JS不是必需的。

案例1: 如果你使用php文件,你可以只包含它(它将被执行) 文件:category-query.php

<?php
  $categories = array() ;

      //Push categories and cast them to objects
      $categories[] = (object) array(
        "categoryName"     => "Dimsum",  
        "categoryImageUrl" => "cat_04.jpg",
        "categoryRootMenu" => false,
        "categoryStyle"    => "submenu"
      ) ;   

    header('Content-Type: application/json');
    echo json_encode($categories) ; 
?>

案例2: 如果您不需要执行脚本并且想要使用file_get_contents:

文件:category-query.php

[{"categoryName":"Dimsum","categoryImageUrl":"cat_04.jpg","categoryRootMenu":false,"categoryStyle":"submenu"}]

文件:index.php

<?php
$data = file_get_contents("category-query.php") ;
$categories = json_decode($data) ;

if (!is_null($categories)){
  Use your array with objects
}
?>

答案 3 :(得分:0)

请参阅我的代码示例

$Link = SITE.'service/Controller.php?request='.ABS.'&action='.SEARCH_CLIENT.'&data='.json_encode($data);  
$ResultArray = array();
  $Result = file_get_contents($Link);
  $jsonResponse = json_decode($Result,true);
  $ResultArray = $jsonResponse[JSON_DATA];

如果print_r $ jsonResponse变量,你将有一个关联数组,那么你将从assoicate数组中获取值。 Beacuse json解码将json转换为数组。

答案 4 :(得分:0)

除了使用file_get_contents()从您控制的文件中获取数据是非常奇怪的,如果源是utf8,您只能成功地将JSON解码为PHP数组。试试这个:

$get_category = utf8_encode(file_get_contents("res3/resproj-data/category-query.php"));
$decode = json_decode($get_category, true);
print_r $decode;