Oc-windows.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php json to csv

Любой Конвертер JSON в CSV

Я пытаюсь построить общую функцию для JSON в CSV Converter. В настоящее время для другого файла JSON я должен внести некоторые изменения в существующую функцию.

текущий код:

Выше код работает для ниже JSON

но проблема в том, что если моя структура JSON изменилась, то я должен переписать вышеуказанную функцию, как будто она не работает для ниже JSON

Решение

Проблема в том, что JSON неструктурированных, в то время как CSV структурированная.

Чтобы устранить это препятствие, вы должны сначала собрать все поля JSON во всей структуре, а заголовок должен быть написан первый, вам нужно дважды просмотреть JSON.

Вышеприведенное не будет работать из коробки для сложных данных (если столбец содержит подинформацию, как в вашем примере). Там вам нужен более сложный шаг:

Еще более сложная информация в JSON свидетельствует о том, что вы делаете это неправильно. Лучше всего тогда повторно закодировать комплексное значение как JSON и сохранить его как есть в поле CSV (используйте json_encode () вместо implode, выше).

В тех случаях, когда вам нужно бросать плохие деньги за худшим, вы можете реализовать то, что я назвал Резней с именем Великого Колонны. В самом простом виде вы код

Я чувствую две мысли об этом. Пожалуйста, не поймите это неправильно, но я чувствую, что вы спросили меня, почему ваш Смит&Фен Wesson с батарейным питанием не работает, даже если вы вставили все шесть батарей в барабан, направили его на голову и нажали на курок.

И я чувствую, что говорю вам: «О, сбоку есть предохранительный выключатель. Вам нужно перевести его из БЕЗОПАСНОГО в ПОЖАР, иначе он не будет работать».

Так, имея в виду, что это выглядит как очень плохая идея, функция сворачивания, о которой я упоминал в комментариях, такова (вы можете адаптировать ее к вашим потребностям, см. позже):

После того как каждый элемент массива сложен, его можно проанализировать, чтобы узнать имена столбцов (вы можете сделать это при свертывании), а затем все происходит, как описано выше.

Функция свертывания работает правильно с предоставленным образцом JSON и дает

Это, конечно, сразу же поднимает первую проблему; «DISTRIBUTOR_API_KEY» — это то, что мы ожидаем от <"DISTRIBUTOR": <"API": <"KEY": 11380>>> , Это работает, но декодирование неоднозначно.

Чтобы преодолеть это ограничение, самый быстрый способ состоит в том, чтобы изменить разделитель с «_» на что-то другое или кодировать его по-разному в ключах.

Имейте в виду: проблем с этим подходом не будет. Если бы у меня было время, я льстил себе, воображая, что мог бы в конечном итоге получить должность, способную конкурировать с Знаменитый ответ .

Не имея времени, я тем самым снимаю с себя всю ответственность за ужасный ущерб, потерю имущества, потерю производительности, потерю времени, неисполнение обязанностей, отчуждение супруга и семейных связей и тяжелые последствия для здоровья (включая, помимо прочего, мучительная и продолжительная смерть), которой я верю, обязательно последуют.

Другие решения

Я использую простой клиент SIDE для преобразования JSON / HTML / XML в CSV, EXCEL …

потому что это легко скачать, прикрепив файл для загрузки атрибута тега привязки …

вот пример, который вам может понравиться …

Kostanos / json-to-csv.php

#!/usr/bin/php
/*
* Convert JSON file to CSV and output it.
*
* JSON should be an array of objects, dictionaries with simple data structure
* and the same keys in each object.
* The order of keys it took from the first element.
*
* Example:
* json:
* [
* < "key1": "value", "kye2": "value", "key3": "value" >,
* < "key1": "value", "kye2": "value", "key3": "value" >,
*
* ]
*
* The csv output: (keys will be used for first row):
* 1. key1, key2, key3
* 2. value, value, value
* 3. value, value, value
* 4. value, value, value
*
* Uses:
* json-to-csv.php file.json > file.csv
*/
if ( empty ( $ argv [ 1 ])) die ( «The json file name or URL is missedn» );
$ jsonFilename = $ argv [ 1 ];
$ json = file_get_contents ( $ jsonFilename );
$ array = json_decode ( $ json , true );
$ f = fopen ( ‘php://output’ , ‘w’ );
$ firstLineKeys = false ;
foreach ( $ array as $ line )
<
if ( empty ( $ firstLineKeys ))
<
$ firstLineKeys = array_keys ( $ line );
fputcsv ( $ f , $ firstLineKeys );
$ firstLineKeys = array_flip ( $ firstLineKeys );
>
// Using array_merge is important to maintain the order of keys acording to the first element
fputcsv ( $ f , array_merge ( $ firstLineKeys , $ line ));
>
?>

This comment has been minimized.

Copy link Quote reply

Charl13 commented Nov 25, 2013

Works like a charm, thanks!

This comment has been minimized.

Copy link Quote reply

saloni12 commented Feb 7, 2014

please advise..what comes in place of the red lines. I am not a programmer and really need help.

This comment has been minimized.

Copy link Quote reply

saloni12 commented Feb 7, 2014

all i get as the out is The json file name or URL is missed.

This comment has been minimized.

Copy link Quote reply

mwalol commented May 28, 2014

array_keys() expects parameter 1 to be array, string given in convert.php on line 40

<
«id»: «15606624099»,
«first_name»: «Abdpel»,
«gender»: «male»,
«last_name»: «El Gulessab»,
«locale»: «fr_FR»,
«name»: «Abdel El Guessab»,
«username»: «zdd.elguessab»
>

This comment has been minimized.

Copy link Quote reply

drorata commented Jul 17, 2014

Seems to work perfectly. Thank.

This comment has been minimized.

Copy link Quote reply

dael commented Nov 25, 2014

Thanks for your work

This comment has been minimized.

Copy link Quote reply

SniperRus commented Dec 23, 2014

great! work fast.
how can filter some raw with some expression? for exp. — gender=male and locale=fr_FR?

This comment has been minimized.

Copy link Quote reply

btn15 commented Jan 28, 2015

Error:
Warning: Invalid argument supplied for foreach()

This comment has been minimized.

Copy link Quote reply

jakebathman commented Mar 2, 2015

Created a fork to make this a PHP function that can be included in other PHP files.

The new function jsonToCsv has a few new options, including outputting the CSV file to the browser or echoing the CSV string to the browser window.

Thanks for the good foundation!

This comment has been minimized.

Copy link Quote reply

t1maccapp commented Oct 26, 2015

Ok, if you see an error «Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes) in . » just add this line after comments block and specify amount of ram you need.

Also if you have an error like «Error: Warning: Invalid argument supplied for foreach()» try to validate your json file. I used this https://www.npmjs.com/package/jsonlint (It worked with 100+ MB json file)

And if you have troubles trying to convert json file from mongoexport and it fails then check this link http://stackoverflow.com/questions/28206472/bson-produced-by-mongoexport-from-mongodb-is-not-a-valid-json

btw, thanks for this script

This comment has been minimized.

Copy link Quote reply

elazdins commented Aug 3, 2016

Thanks for this! Modified the script to work with variable length json entries:

This comment has been minimized.

Copy link Quote reply

clesauln commented Jun 26, 2018

Thanks, i have adapted this converter to parse Point and properties to csv

  • © 2020 GitHub, Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

От CSV до JSON с PHP?

Мне нужно конвертировать файл CSV в JSON на сервере, используя PHP. Я использую этот скрипт который работает:

Переменная $csv — это строка, полученная в результате запроса cURL, который возвращает содержимое CSV.

Я уверен, что это не самый эффективный код PHP, чтобы сделать это, потому что я начинающий разработчик и мои знания о PHP невелики. Есть ли лучший, более эффективный способ преобразовать CSV в JSON, используя PHP?

Примечание. Я знаю, что добавляю whitespace, а затем удаляю его, я делаю это, чтобы у меня была возможность вернуть «readable» JSON, удалив строку $json = preg_replace(‘/[ n]/’, », $json); для целей тестирования.

Редактировать. Спасибо за ваши ответы, на их основе новый код выглядит так:

6 Ответов

Ну, есть функция json_encode(), которую вы должны использовать, а не создавать вывод JSON самостоятельно. А еще есть функция str_getcsv() для парсинга CSV:

Однако вы должны адаптировать $array, если хотите, чтобы выходные данные JSON содержали именованные поля.

Я изменил ответ в вопросе, чтобы использовать первую строку CSV для ключей массива. Это имеет то преимущество, что не нужно жестко кодировать ключи в функции, позволяя ей работать для любого CSV с заголовками столбцов и любым количеством столбцов.

Вот моя измененная версия:

  • Если у вас включено открытие URL для fopen() и оберток, вы можете использовать fgetscsv() .
  • Вы можете построить массив из CSV, а затем преобразовать его с помощью PHP в родной json_encode() .
  • Правильный тип mime для JSON — это application/json .

Вероятно, вы могли бы уменьшить накладные расходы, удалив все пробелы и n’s., но это в вашей заметке.

Вы можете увеличить производительность, пропустив preg_replace и передав логическое значение, которое включит и выключит его.

Кроме того, переменная развертка вашего var[1-10] на самом деле хороша, если всегда есть десять вариаблей.

Взрыв и подход foreach просто прекрасны.

Я рекомендую использовать Coseva (библиотека синтаксического анализа csv) и использовать встроенный метод toJSON().

Ни один из этих ответов не работает с многострочными ячейками, потому что все они предполагают, что строка заканчивается на ‘n’. Встроенная функция fgetcsv понимает, что многострочные ячейки заключены в», Поэтому она не сталкивается с той же проблемой. Приведенный ниже код вместо того, чтобы полагаться на ‘n’, чтобы найти каждую строку csv, позволяет fgetcsv перейти от строки к строке и подготовить наш вывод.

Похожие вопросы:

Я пытаюсь преобразовать CSV в JSON в angularjs, но я не могу. Вот необработанные данные, которые я получаю от API — sentby: Sanjay, sitename: Flipkart, PinCode: 080, stdnumber: 56477382, website.

У меня есть файл JSON, содержащий словарь со многими парами ключ-значение. Я хочу записать его в один CSV. Один из способов сделать это — просто перебрать каждый ключ.

Мне нужно создать пользовательский объект json (мне нужно решить, какая информация идет куда в каком порядке) с данными, которые я получаю от PHP в моем контроллере. Как я вижу, я думаю, что мне.

я пытаюсь преобразовать значение json в плоское значение csv на основе поля, выбранного пользователем . Мой json выглядит так var data = < _index: test, _type: news, _source: < partnerName.

Я пишу код для преобразования JSON в CSV; где мне нужно сохранить ведущие нули У меня есть файл emp.json , который имеет числовые значения в теге. например: 000 , 001 , etc вместе с другими бирками.

Я хочу разобрать файл csv с несколькими кодами внутри, некоторые повторяются, и мне нужно сгруппировать его и сохранить код unic в конце. file.csv CSV файл: code data 12345 45 12345 35 12346 2 12347.

Я пытаюсь преобразовать следующий JSON в CSV через Ruby, но у меня возникли проблемы с моим кодом. Я учусь, как я иду,так что любая помощь приветствуется. require ‘json’ require ‘net/http’ require.

У меня есть файл JSON с твитами — большинство из них на немецком языке. Я бы хотел конвертировать это в файл CSV. Я новичок в Python и следовал этому решению . Но проблема кодирования мешает мне.

У меня есть JSON дикт в Python, который я хотел бы разобрать в CSV, мои данные и код выглядят так: import csv import json x = < success: 1, return: < variable_ >
От Json до csv. Как его преобразовать?

Я испытываю некоторые проблемы с преобразованием Json (с вложенными значениями) в файл CSV (мне нужны заголовки в первой строке и значения json ниже). Я почти сделал это, но у меня все еще есть.

How to convert Json to CSV in php

Hi I am trying to convert a json file with differrent array structure than the normal one into csv file. I had been trying to find out a solution to convert it into a csv file but I cant find the solution.

I tried looking into most of the similar questions in the stackoverflow but none has a array of my kind so they are not much useful to me.

If I use single foreach I am getting error Array to String Conversion failed and Array is being printed as value instead of actual data into the csv file.

If I use two foreach I am getting error fputcsv() expects parameter 2 to be array string given

var_dump or print_r result of decoded json is as follows

Создан 13 ноя. 17 2017-11-13 10:25:16 miststudent2011

get rid of arrays in first step (converting author_* to string) and then it will not throw array to string error – moped 13 ноя. 17 2017-11-13 10:28:20

@ moped thanks for the comment , can you give little more explination ? Should I manually convert every array without a key value or is there any way to do it .Bear with me I just started to learn php. – miststudent2011 13 ноя. 17 2017-11-13 10:42:16

check my answer, ask in comment if something is unclear – moped 13 ноя. 17 2017-11-13 11:00:04

2 ответа

As I mentioned in the comment, first step would be to take care of array values, so each line needs to have values converted (it only counts with the format you provided, if there is an array with 2 values, only first will be passed to csv).

Your modified source code:

Script output after execution:

Создан 13 ноя. 17 2017-11-13 10:49:26 moped

Thanks for the solution but nothing is being written into csv file I had permissions to write the file only empty file is being create and also print_r(»); doesnt provide any output. – miststudent2011 13 ноя. 17 2017-11-13 11:02:03

works fine on my dev, so I assume it’s your source, copy/paste only this part after your json string and check the file again – moped 13 ноя. 17 2017-11-13 11:03:39

I’ve edited my answer so it contains all your source code + needed fixes, be sure to include your ‘$jsondata’ on top of the file – moped 13 ноя. 17 2017-11-13 11:11:27

Thanks @moped I have been struggling to convert it from 3 days second foreach was the issue thanks a lot it works fine.May be caching issue after clearing browser cache and restarting the server it worked.How to add header to the file ? Is it correct //Creating Header in the file. $firstLineKeys = false; foreach ($jsonDecoded as $line) < if (empty($firstLineKeys)) < $firstLineKeys = array_keys($line); fputcsv($fh, $firstLineKeys); >> – miststudent2011 13 ноя. 17 2017-11-13 11:22:05

if it worked, please mark my answer as the accepted one 😉 thanks – moped 13 ноя. 17 2017-11-13 11:22:48

Читать еще:  Как избавиться от ошибки 0xc000007b
Ссылка на основную публикацию
Adblock
detector
×
×