Не работает json_encode, мешает fenom

Всем привет, задрался гуглить. Плз, хелп:

Имеется сниппет
$array = [
  'parents' => '5',
  'limit' => '0',
  'includeTVs' => '
    gallery,
    price,
    seats,
    year,
  ',
  'where' => '{"template:=":3}',
  'return' => 'json'
];
$output = $modx->runSnippet('pdoResources', $array);
$output = json_decode($output, true);
...
...
print_r(json_encode($arr);
Белый экран, а в журнале
Unexpected token ':' in 6659645b22726b14e4c56b6a41d87d64 line 16, near '{"catid":' <- there
При том, что если массив $arr не пытаться декодить, то он прекрасно выводится.
Я подозреваю, что после кодирования массива в json парсер еще раз вызывается зачем-то и спотыкается об эту фигурную скобку. И все ломается

Что интересно, этот же код не вызывает ошибку, если тестировать в modalConsole

Полный код сниппета:
<?php

$array = [
  'parents' => '5',
  'limit' => '0',
  'includeTVs' => '
    gallery,
    price,
    seats,
    year,
  ',
  'where' => '{"template:=":3}',
  'return' => 'json'
];

$output = $modx->runSnippet('pdoResources', $array);


$output = json_decode($output, true);
$arr = [];


foreach($output as $o){
    global $modx;
    $pids = $modx->getParentIds($o['id'], 10, array('context' => 'web'));
    $gal = [];
    
    foreach($o['tv.gallery'] as $g){
        $gal[] = $g['image'];
    }
    
    $a = [
            "catid"     =>  $pids[0],
            "id"        =>  $o['id'],
            "title"     =>  $o['pagetitle'],
            "uri"       =>  $o['uri'],
            "year"      =>  $o['tv.year'],
            "seats"     =>  $o['tv.seats'],
            "price"     =>  $o['tv.price'][0],
            "gallery"   =>  $gal
        ];

    $arr[] = $a;
}



print_r(json_encode($arr));
mayushi
28 июля 2022, 23:53
modx.pro
135
0

Комментарии: 3

Артур
29 июля 2022, 00:06
0
Не могу вспомнить ни одной задачи для решения которой мне требовалось бы из своего сниппета вернуть json. Однако, ты можешь попробовать вернуть из сниппета массив, а с помощью модификатора toJSON закодировать в JSON уже в шаблоне.
    mayushi
    29 июля 2022, 00:31
    0
    Я делаю что-то типа api. Есть ресурс, который слушает post-запросы и в зависимости от параметра дергает сниппеты
    {if $.post.action == 'get_vehicles'} [[get_vehicles]] {/if}
    А вот и ответ: нехорошо мешать синтаксисы. Код заработал:
    {if $.post.action == 'get_vehicles'} {'get_vehicles' | snippet : []} {/if}
    Роман
    02 августа 2022, 14:04
    0
    Может попробовать в ignore засунуть:
    print_r('{ignore}' . json_encode($arr). '{/ignore}');
    Или попробуй так:
    print_r(json_encode($arr, JSON_FORCE_OBJECT));
    Или так:
    print_r($modx->toJson($arr));
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3