Перенос объектов в JSON-файл - PullRequest
0 голосов
/ 17 сентября 2018

Моя проблема заключается в правильном размещении некоторого контента в JSON-файл через PHP. Я написал некоторый кодекс, но он не будет работать.

Вот мой код:

//Get Form Data
$formdata_host = array (
  'server' => array ( $Server => array(
    array (
        'svc' => $_POST['valservice'],
        'id'=> 1
    )
  ))
);

//Get data from existing json file
$jsondata = file_get_contents($filename_moni);

//converts json data into array
$arr_data = json_decode($jsondata, true);

//Push details data to array
array_push($arr_data,$formdata_host);

//Reindex the Array
$arr_data = array_values($arr_data);

//Convert updated array to JSON
$jsondata = json_encode($arr_data, JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK);

//write json data into data.json file
if(file_put_contents($filename_moni, $jsondata)) {
    echo 'Daten erfolgreich gespeichert!';
}
else 
    echo "Error";

}
catch (Exception $e) {
    echo 'Ausnahme entdeckt: ',  $e->getMessage(), "\n";
}

Это JSON-контент, который я получаю после выполнения:

[
 {
    "server": {
        "TEST": [
            {
                "svc": "TEST",
                "id": 1
            }
        ]
    }
 }
]

Но мне нужно это:

{
   "server": {
      "TESTSERVER": [
        {"svc":"TESTSERVICE", "id":1}
     ]
    }
}

Я знаю, что [] для массива, а {} для объекта. Мне нужен сначала JSON-Object -> сервер, затем второй JSON-Object -> hostname, а затем JSON-Array, за которым следуют несколько JSON-объектов, заполненных именами и идентификаторами Servicenames и *.

Надеюсь, вы можете мне помочь, потому что этот выпуск сводит меня с ума прямо сейчас.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я нашел решение:

array_replace_recursive($array, $array2);

Источник: php array_merge без стирания значений?

0 голосов
/ 17 сентября 2018

Измените эти 2 вещи (как я сказал в комментариях)

//Push details data to array
$arr_data = array_merge($arr_data,$formdata_host);
//array_push($arr_data,$formdata_host);

//Reindex the Array
//$arr_data = array_values($arr_data);

Это поместит ключ server на верхний уровень массива, где вы хотите.

выход

{
    "server": {
        "TESTSERVER": [
            {
                "svc": "TESTSERVER",
                "id": 1
            }
        ]
    }
}

Песочница

Я мог бы сказать, что array_values был неправильным, потому что вы хотите, чтобы server был ключом "верхнего уровня", чего никогда не случится с array_values, потому что он лишит эту клавишу.

И array_push - это редко то, что вы хотите делать при объединении массивов, потому что это толкает всю структуру массива. Итак, у вас есть

 [ "server" => ..... ]

Будучи добавленным, вместо

"server" => .....

Содержание.

...