Я пытаюсь проанализировать некоторый JSON, который хранится в моей базе данных, преобразовать его и затем отправить его стороннему API (через webhook). В настоящее время я застрял в формате вывода JSON. Я пытаюсь следовать стандартам JSON: API .
Это мои данные из колонки моей базы данных fields.content
:
[{"0": "Page 1, col 1.", "1": "", "2": ""}, {"0": "", "1": "Page 1, col 2.", "2": ""}, {"0": "", "1": "", "2": "Page 1, col 3"}]
Как видите, это массив JSON, состоящий из объектов. Каждый объект представляет строку, а каждый ключ представляет столбец. Это можно увидеть как:
___________________________________________________
| COL 1 | COL 2 | COL 3 |
___________________________________________________
| Page 1, col 1.| | |
|---------------|----------------|----------------|
| |Page 1, col 2. | |
|---------------|----------------|----------------|
| | | Page 1, col 3. |
---------------------------------------------------
В моей модели Field.php
я использую Laravel, как:
protected $casts = [
'content' => 'array'
];
, который автоматически преобразует строку json в массив:
dd($content) //$content is the json string from the database
Возвращает:
array:3 [▼
0 => array:3 [▼
0 => "Page 1, col 1."
1 => ""
2 => ""
]
1 => array:3 [▼
0 => ""
1 => "Page 1, col 2."
2 => ""
]
2 => array:3 [▼
0 => ""
1 => ""
2 => "Page 1, col 3"
]
]
Так что подумайте, что я делаю что-то с этим массивом, например, выполняю замену слова Page
на Section
:
$out = [];
foreach ($content as $col => $rows) {
$out[$col] = str_replace('Page', 'Section', $rows);
}
dd($out);
Возвращает:
array:3 [▼
0 => array:3 [▼
0 => "Section 1, col 1."
1 => ""
2 => ""
]
1 => array:3 [▼
0 => ""
1 => "Section 1, col 2."
2 => ""
]
2 => array:3 [▼
0 => ""
1 => ""
2 => "Section 1, col 3"
]
]
Теперь я хочу обновить свою базу данных fields.content
, чтобы отразить это изменение. Однако при повторном сохранении его в базу данных, как:
$field = Field::find(1);
$field->content = $out;
$field->save();
Теперь сохраняется как массив массивов:
[["Section 1, col 1.", "", ""], ["", "Section 1, col 2.", ""], ["", "", "Section 1, col 3"]]
Это означает, что когда я отправляю это через мой webhook, он больше не следует той же схеме JSON, с которой он начинал.
Я пытался json_encode массива, например:
$field->content = [json_encode($out, JSON_FORCE_OBJECT)]
Но это не приводит к желаемому выводу / действительному JSON.
Может ли кто-нибудь помочь мне с тем, как преобразовать мой объект JSON с помощью Laravel / PHP и повторно сохранить его в моей базе данных и сохранить исходный действительный формат JSON: API?