我可以通过特定方式格式化通过PHP的json_encode()编码的变量的语法吗?

时间:2019-04-25 02:57:50

标签: javascript php json

编辑:发表了我自己的答案,解决了它。对不起,我浪费了我在这个愚蠢的事情上的时间。

最初,我使用URL获取JSON文件,然后将file_get_contents(url)用作php变量以获取传递给它的JSON字符串。由于我的问题,我假设这会将变量初始化为特殊的JSON类型。

如果我尝试“动态地”创建变量(出于问题目的而进行了硬编码),并在$ data3中使用json_encode($ json),则它的 not 格式不会使我的JS FullCalendar Event可以阅读。我试图通过传递一个与$ data完全相同的直接字符串来回显$ data2作弊。对于我的日历JSON订阅源无效。

所以我需要以某种正确的语法获取$ data3,同时保留JSON属性。

如何处理json_encode输出的语法?

page-template.php

$url = get_stylesheet_directory_uri() . '/calendar.json';

$data = file_get_contents($url);

$data2 = '{ "className" : "mooncenter", "title" : "big energy", "start" : "2019-04-23" }';

$json= '{ "className" : "mooncenter", "title" : "big energy", "start" : "2019-04-23" }';

$data3 = json_encode($json);


echo $data;
echo $data2;
echo $data3;

回声输出。

//$data outputs

{ "className" : "mooncenter", "title" : "big energy", "start" : "2019-04-23" }

//$data2 outputs the same, but does not work because not json encode?

{ "className" : "mooncenter", "title" : "big energy", "start" : "2019-04-23" }

//$data3 outputs weirdly, with double quotes or slashes depending on
// if I encapsuled the PHP init with '' or "". Below is one example.

"{ \"className\" : \"mooncenter\", \"title\" : \"big energy\", \"start\" : \"2019-04-23\" }"

我需要$ data3看起来像前两个一样,同时保留json编码属性。

这可能吗?这样可以解决我动态创建JSON的问题,而无需传递URL,也可以让我永远安宁。

4 个答案:

答案 0 :(得分:0)

  

由于我的问题,我假设这会将变量初始化为特殊的JSON类型。

您不正确。 json_encode()将PHP对象(通常是数组)转换为JSON字符串。 PHP中没有JSON类型。

您的文本文件已经包含JSON文本,因此使用file_get_contents()将该文件的内容加载到变量中已经为您提供了JSON字符串。您无需再次编码。出问题的地方不在此代码内。

答案 1 :(得分:0)

好的,尝试添加更改代码,如下所示

    $myObj->name = "John";
    $myObj->age = 30;
    $myObj->city = "New York";

    $myJSON = json_encode($myObj);

    echo $myJSON;

输出

{"name":"John","age":30,"city":"New York"}

这肯定会为您提供帮助,通过这种方式,您无需手动将键值对作为字符串:)欢呼声

答案 2 :(得分:0)

$data3['name'] = "John";
$data3['age'] = 30;
$data3['city'] = "New York";

$myJSON = json_encode($myObj);
echo $myJSON;

//decode
$phpArray = json_decode($myJSON, true);
print_r($phpArray);

答案 3 :(得分:-1)

所以变量的调用实际上是

//  <?php echo $data2; ?>

以上崩溃,但下面崩溃:

//  <?php echo $data; ?>

不崩溃。我以为是因为它在内存中,但是我重新打开了隐身模式,但它仍然有效。我认为注释行//没有任何作用,因为文本在VSCode中没有变绿色,并且原始的$ data有效。

我本应该从一开始就删除注释行,但要在工作日12h的时候放屁。为什么它会一遍又一遍地工作老实说,我没有精力去关心。问题解决了。