在PHP中格式化JSON

时间:2014-04-02 00:49:28

标签: php json

我正在尝试在PHP中构建一些JSON。我是PHP的新手,对它知之甚少。目前,我有以下内容:

$json = '{"content":{"person":{"name":"$name", "email":"$email"}, "title":"$subject", "description": { "body": "$details" }}}';

$name$email$subject$details都是之前定义的变量。如果我使用上面的代码打印出$ json,我会得到以下内容:

{"content":{"person":{"name":"$name", "email":"$email"}, "title":"$subject", "description": { "body": "$details" }}}'

换句话说,我的变量没有替换字符串中的占位符。如何使用变量作为键值来构建一些JSON?

谢谢!

4 个答案:

答案 0 :(得分:1)

正如评论中所提到的,最好的方法是将数据构建到您想要的结构中,并使用json_encode来修复它。

您特定字符串未替换变量的原因是因为它被'包围。而不是"

$json = "{\"content\":{\"person\":{\"name\":\"$name\", \"email\":\"$email\"}, \"title\":\"$subject\", \"description\": { \"body\": \"$details\" }}}'\";

http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing

答案 1 :(得分:1)

$content = json_encode(array(
'content' => array(
     'person' => array(
         'name' => $name,
         'email' => $email,
         'title' => $subject,
         'description' => array(
             'body' => $details
             )
         )
   )
);
echo $content;

答案 2 :(得分:1)

在PHP中,双引号和单引号做不同的事情;如果使用双引号,则只能在字符串中使用内联变量:

$test = 'world';
echo 'Hello $test!'; // Prints: Hello $test!
echo "Hello $test!"; // Prints: Hello world!

如果使用双引号括起json字符串,则需要转义其中的所有双引号:

$json = "{\"content\":{\"person\":{\"name\":\"$name\", \"email\":\"$email\"}, \"title\":\"$subject\", \"description\": { \"body\": \"$details\" }}}";

替代方法

注意:你熟悉PHP数组吗? PHP具有将数组转换为JSON字符串的函数json_encode - 这样做可能会使代码更容易(特别是如果你的json字符串在任何时候变得更大/更复杂)

$json = json_encode(array
(
    "content" => array
    (
        "person"      => array
        (
            "name"  => $name,
            "email" => $email
        ),
        "title"       => $subject,
        "description" => array
        (
            "body" => $details
        )
    )
));

这些解决方案中的任何一个都应该为$json提供您期望的值

希望这有助于:) x

答案 3 :(得分:0)

文档总是非常有用,请查看字符串的文档,这里将说明如何在单引号或双引号字符串中使用变量。

<强> Documentation on Strings

更简单的解决方案是使用数组和json_encode,它将输出您在问题中的内容:

<?php
$array = array(
    'content' => array(
        'person' => array(
            'name'  => $name,
            'email' => $email,
        ),
        'title' => $subject,
        'description' => array(
            'body' => $details,
        ),
    ),
);

$json = json_encode($array);