Как я могу обновить массив JSON в PHP, заменив старые данные новыми - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть Json-файл.В этом JSON-файле я удалил объект.Это достигается путем создания нового массива и записи этого массива в исходный файл JSON.Но здесь я получаю проблему, потому что новые данные перезаписывают весь JSON-файл.

Я пробовал с

array_merge
array_replace
array_merge_recursive
array_replace_recursive

Но я получаю всегда один и тот же результат: (Здесь я удалил первыйObject)

{
  "server": {
    "SERVER-01": [
        {
            "svc": "SERVICE01",
            "id": 1
        },
        {
            "svc": "SERVICE02",
            "id": 2
        },
        {
            "svc": "SERVICE03",
            "id": 3
        },
        {
            "svc": "SERVICE04",
            "id": 4
        }
    ]
  }
}

Исходный файл имеет следующее содержимое:

{
  "server": {
    "SERVER-01": [
        {
            "svc": "SERVICE01",
            "id": 1
        },
        {
            "svc": "SERVICE02",
            "id": 2
        },
        {
            "svc": "SERVICE03",
            "id": 3
        },
        {
            "svc": "SERVICE04",
            "id": 4
        }
        {
            "svc": "SERVICE05",
            "id": 5
        }
    ]
    "SERVER-02": [
        {
            "svc": "SERVICE01",
            "id": 1
        },
        {
            "svc": "SERVICE02",
            "id": 2
        },
        {
            "svc": "SERVICE03",
            "id": 3
        },
        {
            "svc": "SERVICE04",
            "id": 4
        }
        {
            "svc": "SERVICE05",
            "id": 5
        }
    ]
  }
}

Мой вопрос: как я могу обновить массив, например, с именем Server-01, с новыми данными, не удаляя их?другие массивы?

Это код PHP, который у меня есть:

// load file
$file = file_get_contents($filename_moni);

// decode copy of json to associative array
$data = json_decode($file, true);

// get ID to delete
$ID = $ID - 1;

unset($data['server'][$Server][$ID]);   

$var=array();
foreach($data['server'][$Server] as $key => $item) {

    $var['server'][$Server][] = $item;      

}

foreach($var['server'][$Server] as $key => $item) {

    if ( $key != $var['server'][$Server][$key]['id'] ) {

        $var['server'][$Server][$key]['svc'] = $item['svc'];
        $var['server'][$Server][$key]['id'] = $key + 1;

    }       

}

$data = array_replace($data,$var);
$jsondata = json_encode($data, JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK);
file_put_contents($filename_moni, $jsondata);

1 Ответ

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

Не имея четкого описания желаемого результата, кажется, все, что вам нужно сделать, это заменить данные массива другими / обновленными данными ... Тогда чего-то вроде этого достаточно:

<code>$arr = json_decode($json, true);

// data items to delete
unset($arr['server']['SERVER-01'][0]['svc']);
unset($arr['server']['SERVER-01'][0]['id']);

// the new (dummy) data that needs to be set in lieu of deleted data
$svc = 'SERVICE09';
$id = 9;

$arr['server']['SERVER-01'][0]['svc'] = $svc;
$arr['server']['SERVER-01'][0]['id'] = $id;

// array with inserted values
echo 'array with newly inserted values';
echo '<pre>';
print_r($arr);
echo '
';
...