Как сгенерировать файл .json с помощью PHP?

127
CREATE TABLE Posts
{
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
url VARCHAR(200)
}

код json.php

<?php
$sql=mysql_query("select * from Posts limit 20");
echo '{"posts": [';
while($row=mysql_fetch_array($sql))
{
$title=$row['title'];
$url=$row['url'];
echo '

{

"title":"'.$title.'",

"url":"'.$url.'"

},'; 
}
echo ']}';

?>

Мне нужно создать results.jsonфайл.

Egglabs
источник
1
Наличие некоторого объяснения / контекста в нашем вопросе по меньшей мере вежливо. Этот вопрос больше не кажется неявным приказом никому в частности и сообществу переполнения стека в целом ..
Sl4rtib4rtf4st

Ответы:

247

Вот пример кода:

<?php 
$sql="select * from Posts limit 20"; 

$response = array();
$posts = array();
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)) { 
  $title=$row['title']; 
  $url=$row['url']; 

  $posts[] = array('title'=> $title, 'url'=> $url);
} 

$response['posts'] = $posts;

$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($response));
fclose($fp);


?> 
Алек Смарт
источник
1
Я использовал этот код в своем проекте. Файл results.json хорошо работает на локальном хосте и не работает на удаленном сервере. Вы можете объяснить, почему так ..
Винеш Гопалакришнан
4
Fwrite можно отключить в настройках вашего сервера
Крис,
хотя это здорово, возможно, потому что я сейчас использую PHP 5, и он не был доступен в то время, когда был опубликован этот ответ, но вы можете избавиться от строки $ result = и внутри цикла while просто создайте mysql_feth_array ($ sql)
Обновите 1-ю строку до $ sql = "select * from 20 posts limit"; , удалите mysql_query ()
Сачин Вайраги
6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- использует пробелы для форматирования JSON. Другие константы здесь
Андрей Красуцкий
49

Использовать это:

$json_data = json_encode($posts);
file_put_contents('myfile.json', $json_data);

Перед запуском сценария необходимо создать myfile.json.

RileyManda
источник
Фактически, на дату комментария нет необходимости создавать файл перед сохранением данных. Хотя вам все равно придется создать несуществующие подпапки, если таковые имеются, на пути сохранения. Вот официальный документ для file_put_contents для удобства.
Валентин Ши
1
Да, языки программирования развиваются. Мой ответ на пост был опубликован в 2017 г. Вам следовало опубликовать новый ответ с обновленным способом его выполнения, а не просто проигнорированный код, который работал в 2017 г.
RileyManda
1
В предоставленном вами фрагменте нет изменений. Именно так file_put_contentsработает, о чем я упоминал в своем первоначальном комментарии.
Валентин Ши
30

Вставьте полученные значения в массив вместо повторения.

Используйте file_put_contents()и вставьте json_encode($rows)в этот файл, если $rowsэто ваши данные.

chelmertz
источник
2
Я вижу, что ваш ответ был опубликован до того, как получил наибольшее количество голосов. Если бы вы только поместили пример кода, вы бы получили гораздо больше голосов.
Энгин Япичи
7

Здесь я упомянул простой синтекс для создания файла json и вывода значения массива внутри файла json в красивой манере.

$array = array('name' => $name,'id' => $id,'url' => $url);
$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($array, JSON_PRETTY_PRINT));   // here it will print the array pretty
fclose($fp);

Надеюсь, это сработает для вас ....

Pasupathi Thangavel
источник
6

Вы можете просто использовать функцию json_encode в php и сохранить файл с функциями обработки файлов, такими как fopen и fwrite .

Sarfraz
источник
6

Если вы извлекаете динамические записи, лучше иметь 1 файл php, который создает представление json, а не создавать файл каждый раз.

my_json.php

$array = array(
    'title' => $title,
    'url' => $url
);

echo stripslashes(json_encode($array)); 

Затем в вашем скрипте укажите путь к файлу my_json.php

CyberJunkie
источник
1
Когда я пытаюсь запустить это с помощью getJason, я получаю Resource, интерпретируемый как Script, но переданный с помощью MIME-типа text / html в консоли.
codingbbq 06
@noobcode Чтобы исправить это, я думаю, вам следует установить заголовок Content-Type в вашем my_json.php.
katalin_2003
5

Для начала нужно его расшифровать:

$jsonString = file_get_contents('jsonFile.json');
$data = json_decode($jsonString, true);

Затем измените данные:

$data[0]['activity_name'] = "TENNIS";
// or if you want to change all entries with activity_code "1"
foreach ($data as $key => $entry) {
    if ($entry['activity_code'] == '1') {
        $data[$key]['activity_name'] = "TENNIS";
    }
}

Затем перекодируйте его и сохраните обратно в файл:

$newJsonString = json_encode($data);
file_put_contents('jsonFile.json', $newJsonString);

копия

Darkcoder
источник