Где ошибка в коде при записи в переменную?
Ошибка, как обычно, в ДНК. Шутка.

Запомни на всю жизнь: 
JSON НИКОГДА, ни под каким видом не пишется руками
Напечатай это большими буквами и повесь себе на монитор.

Чтобы получить JSON, в РНР делаешь массив, который потом выводишь с помощью json_encode
Вы получаете данные из инфоблока, вам нужно это в виде json отправить куда то кому то, но у вас синтаксические ошибки при формировании json.
Вам нужно использовать валидатор для проверки
Очень помогает выявлять лишние или отсутствующие символы, результат сравнивать с примерами из документации.

Это совсем некрасиво:
spoiler$data_for_write ='
  {
    "type": "FeatureCollection",
    "metadata": {
      "name": "Карта торгового центра",
      "creator": "SWP",
      "description": ""
    },
  '.
    while($ob = $res->GetNextElement()){
      $arFields = $ob->GetFields();
      $arProps = $ob->GetProperties();
  .'
      "features": [{
Сначала соберите всё в массив:
Пример
spoiler$data = array('items' =>array(
array(
'description' => $description, 
'category_id' => $category_id, 
'name' => 'Карта торгового центра',
'offer_id' => $offer_id,
'price' => $price,
'old_price' => $old_price,