У меня возникли проблемы с преобразованием многомерного массива PHP в JSON. Я конвертирую его с помощью json_encode, но он получает значение null.
Я пытаюсь разработать orgChart, данные считываются из файла CSV и сохраняются в массиве. Макет и код JS созданы для получения файла JSON, поэтому он мне нужен в этом формате.
Это фрагмент массива, он содержит 175 массивов внутри
Array
(
[2] => Array
(
[id] => 1
[nome] => ELOTECH
[cargo] => ""
[idcargo] => 1
[pai] => 0
)
[3] => Array
(
[id] => 10
[nome] => Departamento Pessoal
[cargo] =>
[idcargo] => 10
[pai] => 1
)
[4] => Array
(
[id] => 20
[nome] => Comercial
[cargo] =>
[idcargo] => 20
[pai] => 1
)
)
Я использую json_encode для преобразования массива в JSON OBS: *** $ colab - это имя массива, передаваемого CSV.
$dados_json = json_encode($colab);
$fp = fopen("jsonOrgan.json", "w");
$write = fwrite($fp, $dados_json);
fclose($fp);
Мне нужно, чтобы он выводился в JSON следующим образом:
[{
"id": 1,
"cargo": "ELOTECH",
"nome": "",
"idcargo": 1,
"pai": 0
}]
Но он возвращает ноль
Вот как я создаю массив из файла CSV.
while ($line = fgetcsv($save, 1000, ";")) {
if ($linha++ == 0) {
continue;
}
$colab[$linha] = [
'id' => $line[0],
'nome' => $line[1],
'cargo' => $line[4],
'idcargo' => $line[0],
'pai' => $line[5],
];}
Похоже, вы ищете переменные переменные. Попробуйте json_encode($$colab);
@RiggsFolly OP отредактировал. Я проголосовал за повторное открытие.
Ваш массив был создан следующим образом {1: {data ...}}?
@MonkeyZeus, я пробовал и ничего не получил
Пожалуйста, выложите на json_encode, как это было создано.
@RogerRussel, да, он создан так [1 => [['id'] => '1', [nome] => '...'], 2 => [['id'] => ' 2 ', [' nome '] => ...].
Я знаю, в чем проблема, но сначала вы должны принять мои изменения в своем сообщении.
@RogerRussel, я ошибся, друг мой, извини. JSON ничего не отображает, он получает NULL.
Я постараюсь всего лишь услышать. Ваша проблема в том, что ваш массив проиндексирован числами в качестве ключа, вы должны изменить что-то вроде этого $ arr [$ number] ["nome"] = "asdasd" на что-то более похожее на $ arr [] = ["nome" => " aasda "," id "=> 123]
Если ему задано значение null, вы должны искать специальные символы, которые не закодированы как utf8.
Вы можете увидеть, какая ошибка произошла с этой функцией. «Json_last_error_msg ()» обычно null на json_encode вызвано неправильным значением в массиве, например «nome» => «Técnico», если оно не было закодировано с помощью UTF8, вы должны кодировать его с помощью utf8_encode перед используйте json_encode.
Правильно, Роджер, я использовал utf8_encode, и теперь он конвертируется в JSON, но теперь проблема в той, о которой вы упомянули выше. {"2": {"id": "1", "nome": "ELOTECH", " Cargo ":" "," idcargo ":" 1 "," pai ": 0}," 3 ": {" id ":" 10 "," n ome ":" Departamento Pessoal "," cargo ":" "," idcargo ":" 10 "," pai ":" 1 "}
Измените создание массива с $ arr [$ number] = ["id" => 123123] на $ arr [] = ["id" => 123123], потому что PHP считает, что числа - это особые ключи, а не только индекс. , если это было невозможно, вам нужно будет переиндексировать ваш массив примерно так: $ newArray = []; foreach ($ arr as $ a) $ newArray [] = $ a;
Я отредактирую пост, показывающий, как я создаю массив
@RogerRussel Ты спас мне жизнь, друг мой. После исправления uft8_encode я последовал тому, как вы мне сказали, и создал массив $ colab [] => [], и теперь JSON - это то, что мне было нужно. Спасибо. У меня не хватает слов, чтобы выразить вам свою благодарность.
@RogerRussel может / должен опубликовать ответ на этот вопрос и закрыть вопрос должным образом.
Используйте нетutf8_encode(), это не какая-то волшебная функция, которая знает ваш ввод и переводит его в UTF8, она абсолютно ничего не делает, кроме как предполагает ввод ISO-8859-1 [западноевропейский] и переводит входные байты в соответствии с этим переводом. Если ваш ввод закодирован буквально в что-либо else [включая UTF8], эта функция незаметно повредит ваши данные. Используйте что-то вроде mb_convert_encoding() или iconv() и правильно укажите кодировки ввода / вывода.
@ Sammitch, спасибо за информацию, я этого не знал. Попробую ваши предложения.
@JeanLima пожалуйста.
@FunkFortyNiner Я опаздывал на собеседование, и сегодня он уже ответил, но это тоже нормально.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


С инструкциями Роджера Рассела моя проблема была решена.
JSON получал NULL из-за кодировки. Я использовал uft8_encode и решил эту проблему. Затем я изменил создание массива, чтобы оно соответствовало шаблону, в котором мне нужен файл JSON.
Я создавал массив, используя счетчик в качестве индекса, как показано ниже:
$colab[$linha] = [
'id' => $line[0],
'nome' => $line[1],
'cargo' => $line[4],
'idcargo' => $line[0],
'pai' => $line[5],
]
Затем изменили его, чтобы он создавался без передачи индекса:
$colab[] = [
'id' => $line[0],
'nome' => $line[1],
'cargo' => $line[4],
'idcargo' => $line[0],
'pai' => $line[5],
]
И все, моя проблема решилась!
Спасибо!
Хорошая работа - самостоятельно найти проблему и решение, а затем поделиться этим с другими, продолжайте в том же духе :)
Это было не в одиночку, @Roger Russel сделал всю работу
Один рад быть полезным
В пользу английского пор