Удалить родительский ключ из файла JSON с помощью PHP - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть функция php, которая получает следующий файл json из базы данных Firebase и создает объект с именем $data.Имейте в виду, что я не знаю заранее родительского поля: -LYd55ZsqtoktfA58X91

{
    "-LYd55ZsqtoktfA58X91": {
        "city": "NY",
        "department": "abc0",
        "email": "awesomemail@test.com",
        "fullName": "David Awesome",
        "gender": 1,
        "hireDate": "2019-02-04",
        "isPermanent": false,
        "mobile": "123456789"
    }
}

Проблема

Мне нужно удалить первого родителяполе, такое, что ожидаемый результат:

 {
        "city": "NY",
        "department": "abc0",
        "email": "awesomemail@test.com",
        "fullName": "David Awesome",
        "gender": 1,
        "hireDate": "2019-02-04",
        "isPermanent": false,
        "mobile": "123456789"
   }

Мой первый подход

, зная родительский ключ.Я мог бы получить - например - некоторое свойство, а затем отформатировать этот JSON вручную.В этом примере я получаю значение города (Нью-Йорк).

echo ("City: " . $data["-LYd55ZsqtoktfA58X91"]["city"]);

Мой второй подход

Итерация по данным, но это может быть "дорогой" функцией.

foreach ($data as $emp ) {
    echo implode($emp, ",");
}

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Учитывая предоставленный вами JSON (JSON с одним элементом), я бы рекомендовал использовать current () :

<?php

$json = <<<JSON
{
    "-LYd55ZsqtoktfA58X91": {
        "city": "NY",
        "department": "abc0",
        "email": "awesomemail@test.com",
        "fullName": "David Awesome",
        "gender": 1,
        "hireDate": "2019-02-04",
        "isPermanent": false,
        "mobile": "123456789"
    }
}
JSON;

$data = current(json_decode($json, true));

print_r($data);
echo $data['city'];

https://3v4l.org/WQllZ

Учитывая JSONс несколькими элементами, если вы хотите получить только коды городов, вы можете использовать array_column () :

<?php

$json = <<<JSON
{
    "-LYd55ZsqtoktfA58X91": {
        "city": "NY",
        "department": "abc0",
        "email": "awesomemail@test.com",
        "fullName": "David Awesome",
        "gender": 1,
        "hireDate": "2019-02-04",
        "isPermanent": false,
        "mobile": "123456789"
    },
    "-LYd55ZsqtoktfA58X92": {
        "city": "CH",
        "department": "abc0",
        "email": "awesomemail@test.com",
        "fullName": "David Awesome",
        "gender": 1,
        "hireDate": "2019-02-04",
        "isPermanent": false,
        "mobile": "123456789"
    }
}
JSON;

$cities = array_column(json_decode($json, true), 'city');

print_r($cities);

https://3v4l.org/nkaZF

0 голосов
/ 16 февраля 2019

С учетом заданной строки данных json

<code>$str='{
    "-LYd55ZsqtoktfA58X91": {
        "city": "NY",
        "department": "abc0",
        "email": "awesomemail@test.com",
        "fullName": "David Awesome",
        "gender": 1,
        "hireDate": "2019-02-04",
        "isPermanent": false,
        "mobile": "123456789"
    }
}';
/* decode as an array */
$json=json_decode( $str,true );
/* get the array jeys - specifically the first one */
$key=array_keys( $json )[0];
$data=json_encode( $json[ $key ] );

/* work with results */
printf("<pre>%s\n%s
", $ key, print_r ($ data, true));

выводит:

-LYd55ZsqtoktfA58X91
{"city":"NY","department":"abc0","email":"awesomemail@test.com","fullName":"David Awesome","gender":1,"hireDate":"2019-02-04","isPermanent":false,"mobile":"123456789"}

Альтернативный и более краткий метод был бы следующим:

$json=json_decode( $str );
$key=array_keys( get_object_vars( $json ) )[0];

echo $json->$key->city; //NY etc

Этот второй метод, на мой взгляд, предпочтительнее первого метода

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