Как сгенерировать файл .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файл.


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.


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

1
Да, языки программирования развиваются. Мой ответ на пост был опубликован в 2017 г. Вам следовало опубликовать новый ответ с обновленным способом его выполнения, а не просто проигнорированный код, который работал в 2017 г.
RileyManda

1
В предоставленном вами фрагменте нет изменений. Именно так file_put_contentsработает, о чем я упоминал в своем первоначальном комментарии.
Валентин Ши

30

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

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


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);

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



6

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


6

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

my_json.php

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

echo stripslashes(json_encode($array)); 

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


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);

копия

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.