【问题标题】:convert php array to json format in symfony [closed]在symfony中将php数组转换为json格式[关闭]
【发布时间】:2014-08-21 11:53:01
【问题描述】:

我有这个 Json(见下文),实际上我正在尝试找到一种方法来使用 php 数组生成这样的 Json。我的问题是如何从 php 数组中生成这样的 json。换句话说,我仍然不知道如何构建该 php 数组,以便我可以将其转换为如下所示的 json。我正在使用 symfony2 来渲染这个像这样的 json

var presentation = [{
                    "image": "images/cover.jpg",
                    "sentence": "This is a sentence",
                    "audio": "hello.mp3",
                    "sentence_info": [
                        {"start": 0, "end": 0.5 },
                        { "start": 0.5, "end": 1.2 }
                    ]
                },

                {
                    "image": "images/cat.jpg",
                    "sentence": "This is another sentence",
                    "audio": "bey.mp3",
                    "sentence_info": [
                        { "start": 0, "end": 0.2 },
                        { "start": 0.2, "end": 0.8 },
                        { "start": 0.8, "end": 1.2 },
                        { "start": 1.2, "end": 1.5 },
                        { "start": 1.5, "end": 2 }
                    ]
                },

                {
                    "image": "images/dog.jpg",
                    "sentence": "This is a third sentence",
                    "audio": "good.mp3",
                    "sentence_info": [
                        { "start": 0, "end": 0.5 },
                        { "start": 0.5, "end": 1.2 }
                    ]
                }
];

【问题讨论】:

  • 在你的控制器中使用 Symfony\Component\HttpFoundation\JsonResponse;当你想返回 JSON 时: return new JsonResponse(array('test'=>'test'));或返回新的 JsonResponse($yourarray);
  • 谢谢,当我使用 JsonRespone() 时,我实际上得到了一个退出 gook 结果,但是我的数组中有一些奇怪的额外字符。这是我在该数组中得到的值:“image”:“\/ara\/web\/uploads\/images\/slide\/34.jpeg”。不好的是,当我将结果传递给 javascript 变量时,我得到的结果甚至是最糟糕的:“books”:[{“image”:“\/ara\/web\/uploads\/images\ /slide\/32.jpeg"
  • 你的问题被搁置了......在这个问题没有被重新打开之前,我无法正确地帮助你。因为我不能用格式化代码发表评论。
  • 谢谢,问题已经解决了

标签: php json symfony


【解决方案1】:

这只是 PHP 中的简单数组赋值。像这样:

public function whatEver()
{
    $presentation = array(
        array(
            'image' => 'images/cover.jpg',
            'sentence' => 'This is a sentence',
            'audio' => 'hello.mp3',
            'sentence_info' => array(
                array('start' => 0, 'end' => 0.5),
                array('start' => 0.5, 'end' => 1.2),
            ),
        ),
        array(
            'image' => 'images/cat.jpg',
            'sentence' => 'This is another sentence',
            'audio' => 'bey.mp3',
            'sentence_info' => array(
                array('start' => 0, 'end' => 0.2),
                array('start' => 0.2, 'end' => 0.8),
                array('start' => 0.8, 'end' => 1.2),
                array('start' => 1.2, 'end' => 1.5),
                array('start' => 1.5, 'end' => 2),
            ),
        ),
        array(
            'image' => 'images/dog.jpg',
            'sentence' => 'This is a third sentence',
            'audio' => 'good.mp3',
            'sentence_info' => array(
                array('start' => 0, 'end' => 0.5),
                array('start' => 0.5, 'end' => 1.2),
            ),
        ),
    );

    $presentation =  json_encode($presentation, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

    $response = new Response($presentation);
    $response->headers->set('Content-Type', 'application/json');

    return $response;
}

【讨论】:

    【解决方案2】:

    你可以在你建立的数组上使用json_encode

    【讨论】:

    • 问题是我仍然不知道如何构建一个phparray,当我使用json_encode时会给我这个结果(json结果)
    • 在 php 中指定 $presentation 是一个字符串,内容是 JavaScript 变量中的所有内容,用单引号括起来。然后 var_dump(json_decode($presentation));
    【解决方案3】:

    简单查看提供的 json,您会发现它是一个数组 [],其中包含各种对象 {}

    您将循环访问从任何地方获取数据的数据(很可能是数据库?),然后将其添加到数组中,如下所示:

    $data = array();
    foreach ($data_from_wherever as $item) {
        $i = array(
            'image' => '',
            'sentence' => '',
            'audio' => '',
            'sentence_info' => array(
                array(
                    'start' => '',
                    'finish' => ''
                ),
                array(
                    'start' => '',
                    'finish' => ''
                ),
            // ......etcetc
            ),
        );
    
        array_push($data, $i);
    }
    

    给你一个数组,你可以json_encode() 来实现你想要的输出。

    $presentation = json_encode($data);
    

    如果您还不知道如何获取上述数据,您可以像下面这样简单地创建 $data 数组,然后对其进行编码。

    $data = array(
        array(
            'image' => 'images/cover.jpg',
            'sentence' => 'This is a sentence',
            'audio' => 'hello.mp3',
            'sentence_info' => array(
                array('start' => 0, 'end' => 0.5),
                array('start' => 0.5, 'end' => 1.2),
            ),
        ),
        array(
            'image' => 'images/cat.jpg',
            'sentence' => 'This is another sentence',
            'audio' => 'bey.mp3',
            'sentence_info' => array(
                array('start' => 0, 'end' => 0.2),
                array('start' => 0.2, 'end' => 0.8),
                array('start' => 0.8, 'end' => 1.2),
                array('start' => 1.2, 'end' => 1.5),
                array('start' => 1.5, 'end' => 2),
            ),
        ),
        array(
            'image' => 'images/dog.jpg',
            'sentence' => 'This is a third sentence',
            'audio' => 'good.mp3',
            'sentence_info' => array(
                array('start' => 0, 'end' => 0.5),
                array('start' => 0.5, 'end' => 1.2),
            ),
        ),
    );
    

    【讨论】:

    • @user3792227 告诉我进展如何!
    • 我昨天最终尝试了另一种方法,它正在工作。但这次我面临另一个与框架 symfony2 相关的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多