Як генерувати .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 можна було вимкнути у налаштуваннях вашого сервера
Chris

хоча це чудово, можливо, тому що я зараз використовую PHP 5, і він не був доступний під час опублікування цієї відповіді, але ви можете позбутися від $ result = рядка і всередині циклу while просто зробіть mysql_feth_array ($ sql)

Будь ласка, оновіть 1-й рядок до $ sql = "виберіть * з обмеження 20"; , видаліть mysql_query ()
Sachin Vairagi

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

Якщо ви перетягуєте динамічні записи, краще мати файл php, який створює представлення json, а не створювати файл кожного разу.

my_json.php

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

echo stripslashes(json_encode($array)); 

Потім у вашому сценарії встановіть шлях до файлу my_json.php


1
Коли я намагаюся запустити це за допомогою getJason, я отримую Resource інтерпретувати як Script, але переданий з текстом / html типу MIME в консолі.
codingbbq

@noobcode Щоб виправити це, я думаю, ви повинні встановити заголовок "Тип вмісту" у своєму "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.