Ошибки преобразования Array Php в JSON

У меня возникли проблемы с преобразованием многомерного массива 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],
            ];}

В пользу английского пор

RiggsFolly 13.11.2018 19:05

Похоже, вы ищете переменные переменные. Попробуйте json_encode($$colab);

MonkeyZeus 13.11.2018 19:21

@RiggsFolly OP отредактировал. Я проголосовал за повторное открытие.

Funk Forty Niner 13.11.2018 19:21

Ваш массив был создан следующим образом {1: {data ...}}?

Roger Russel 13.11.2018 19:43

@MonkeyZeus, я пробовал и ничего не получил

Jean Lima 13.11.2018 19:45

Пожалуйста, выложите на json_encode, как это было создано.

Roger Russel 13.11.2018 19:48

@RogerRussel, да, он создан так [1 => [['id'] => '1', [nome] => '...'], 2 => [['id'] => ' 2 ', [' nome '] => ...].

Jean Lima 13.11.2018 19:49

Я знаю, в чем проблема, но сначала вы должны принять мои изменения в своем сообщении.

Roger Russel 13.11.2018 19:56

@RogerRussel, я ошибся, друг мой, извини. JSON ничего не отображает, он получает NULL.

Jean Lima 13.11.2018 19:58

Я постараюсь всего лишь услышать. Ваша проблема в том, что ваш массив проиндексирован числами в качестве ключа, вы должны изменить что-то вроде этого $ arr [$ number] ["nome"] = "asdasd" на что-то более похожее на $ arr [] = ["nome" => " aasda "," id "=> 123]

Roger Russel 13.11.2018 19:59

Если ему задано значение null, вы должны искать специальные символы, которые не закодированы как utf8.

Roger Russel 13.11.2018 20:00

Вы можете увидеть, какая ошибка произошла с этой функцией. «Json_last_error_msg ()» обычно null на json_encode вызвано неправильным значением в массиве, например «nome» => «Técnico», если оно не было закодировано с помощью UTF8, вы должны кодировать его с помощью utf8_encode перед используйте json_encode.

Roger Russel 13.11.2018 20:04

Правильно, Роджер, я использовал 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 "}

Jean Lima 13.11.2018 20:06

Измените создание массива с $ arr [$ number] = ["id" => 123123] на $ arr [] = ["id" => 123123], потому что PHP считает, что числа - это особые ключи, а не только индекс. , если это было невозможно, вам нужно будет переиндексировать ваш массив примерно так: $ newArray = []; foreach ($ arr as $ a) $ newArray [] = $ a;

Roger Russel 13.11.2018 20:07

Я отредактирую пост, показывающий, как я создаю массив

Jean Lima 13.11.2018 20:10

@RogerRussel Ты спас мне жизнь, друг мой. После исправления uft8_encode я последовал тому, как вы мне сказали, и создал массив $ colab [] => [], и теперь JSON - это то, что мне было нужно. Спасибо. У меня не хватает слов, чтобы выразить вам свою благодарность.

Jean Lima 13.11.2018 20:18

@RogerRussel может / должен опубликовать ответ на этот вопрос и закрыть вопрос должным образом.

Funk Forty Niner 13.11.2018 20:24

Используйте нетutf8_encode(), это не какая-то волшебная функция, которая знает ваш ввод и переводит его в UTF8, она абсолютно ничего не делает, кроме как предполагает ввод ISO-8859-1 [западноевропейский] и переводит входные байты в соответствии с этим переводом. Если ваш ввод закодирован буквально в что-либо else [включая UTF8], эта функция незаметно повредит ваши данные. Используйте что-то вроде mb_convert_encoding() или iconv() и правильно укажите кодировки ввода / вывода.

Sammitch 13.11.2018 20:36

@ Sammitch, спасибо за информацию, я этого не знал. Попробую ваши предложения.

Jean Lima 13.11.2018 20:37

@JeanLima пожалуйста.

Roger Russel 14.11.2018 17:53

@FunkFortyNiner Я опаздывал на собеседование, и сегодня он уже ответил, но это тоже нормально.

Roger Russel 14.11.2018 17:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
21
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С инструкциями Роджера Рассела моя проблема была решена.

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],
                ]

И все, моя проблема решилась!

Спасибо!

Хорошая работа - самостоятельно найти проблему и решение, а затем поделиться этим с другими, продолжайте в том же духе :)

Motassem MK 13.11.2018 20:32

Это было не в одиночку, @Roger Russel сделал всю работу

Jean Lima 13.11.2018 20:34

Один рад быть полезным

Roger Russel 05.02.2020 23:24

Другие вопросы по теме