неверные JSON данные - массив в объект - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в объекте php json. Я пытаюсь создать формат ниже json из данных таблицы моей базы данных. Где в основном посещений - это объект. Но мои знания об объектах очень ограничены, поэтому я застрял в них.

"visits": {
  "order_1": {
    "location": {
      "name": "6800 Cambie",
      "lat": 49.227107,
      "lng": -123.1163085
    },
    "start": "9:00",
    "end": "12:00",
    "duration": 10,
    "load": 1,
    "type": "A",
    "priority": "high"
  }
}

Но я получаю формат ниже json. Что неверно.

{
  "visits": [
    {
      "order_1": {
        "location": {
          "name": "21 Marara Court, ALBANY CREEK QLD 4035",
          "lat": "-37.7044",
          "lng": "145.1006"
        }
      }
    },
    {
      "order_2": {
        "location": {
          "name": "Unit 7, 19 O'Connell Street, KANGAROO POINT QLD 4169",
          "lat": "-37.6389",
          "lng": "145.1950"
        }
      }
    },

  ],
  "fleet": {
    "vehicle_1": {
      "start_location": {
        "id": "depot",
        "name": "23 Moverly Rd",
        "lat": -33.9356141,
        "lng": 151.2425993
      },
      "end_location": {
        "id": "depot",
        "name": "23 Moverly Rd",
        "lat": -33.9356141,
        "lng": 151.2425993
      }
    }
  },

}

Проблема в массиве "visits": [. Но мне нужен объект. Итак, мой код php приведен ниже:

foreach ($orders as $value) {
  $orders2[] = array(
        "order_$i"=> array(
            "location"=> array(
                "name"=> $value['address'],
                "lat"=> $value['lat'],
                "lng"=> $value['long']
            ),
        ),
    );
}

$data = array(
    "visits" => $orders2,
    "fleet"=> array(
        "vehicle_1"=> array(
            "start_location"=> array(
                "id"=> "depot",
                "name"=> "23 Moverly Rd",
                "lat"=> -33.9356141,
                "lng"=> 151.2425993
            ),
            "end_location"=> array(
                "id"=> "depot",
                "name"=> "23 Moverly Rd",
                "lat"=> -33.9356141,
                "lng"=> 151.2425993
            ),

        )
    ),

);

Было бы лучше, если бы кто-нибудь мог дать мне какое-нибудь представление. Спасибо :)

1 Ответ

1 голос
/ 08 мая 2020

Чтобы получить объект с json_encode, вы должны использовать настраиваемые ключи массива.

Попробуйте следующее:

foreach ($orders as $value) {
    $orders2["order_$i"] = array(
        "location"=> array(
            "name"=> $value['address'],
            "lat"=> $value['lat'],
            "lng"=> $value['long']
        ),
     );
}

Просто для полноты:

Вы также можете использовать параметр JSON_FORCE_OBJECT в json_encode или напрямую использовать StdClass, чтобы заставить его получить объект json. Но в вашем случае структура все равно была неправильной, поэтому приведенный выше код должен работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...