メインコンテンツまでスキップ

json

SQLのデータをJSON形式に変換する方法はいくつかあります。主に次の方法が考えられます。


1. SQLの結果を直接JSONで取得

MySQL

MySQL 5.7以降では、JSON_OBJECTJSON_ARRAYAGG を使ってJSONを直接取得できます。

SELECT JSON_OBJECT('id', id, 'name', name, 'age', age) AS json_result
FROM users;

全データをJSONのリストにするには:

SELECT JSON_ARRAYAGG(
JSON_OBJECT('id', id, 'name', name, 'age', age)
) AS json_result
FROM users;

PostgreSQL

PostgreSQLでは json_agg を使います。

SELECT json_agg(users) FROM users;

キーを明示するなら:

SELECT json_agg(
json_build_object('id', id, 'name', name, 'age', age)
) FROM users;

SQL Server

SQL Serverでは FOR JSON AUTO を使うと簡単にJSON形式でデータを取得できます。

SELECT id, name, age FROM users FOR JSON AUTO;

2. プログラムでSQLデータをJSONに変換

SQLのデータを取得した後に、プログラムでJSONに変換することも可能です。

Python

import json
import mysql.connector

conn = mysql.connector.connect(host="localhost", user="root", password="", database="sample_db")
cursor = conn.cursor(dictionary=True)

cursor.execute("SELECT id, name, age FROM users")
rows = cursor.fetchall()

json_data = json.dumps(rows, indent=4) # JSONに変換
print(json_data)

cursor.close()
conn.close()

JavaScript(Node.js)

const mysql = require('mysql2/promise');

async function fetchUsers() {
const connection = await mysql.createConnection({host: 'localhost', user: 'root', database: 'sample_db'});
const [rows] = await connection.execute('SELECT id, name, age FROM users');
console.log(JSON.stringify(rows, null, 2)); // JSONに変換して表示
}

fetchUsers();

3. SQLデータをAPIでJSONに変換

もしデータを外部API経由で取得する場合、REST APIやGraphQLを使うと自動的にJSON形式でデータが取得できます。

例:PHP + MySQL でAPIを作る

<?php
header("Content-Type: application/json");

$conn = new mysqli("localhost", "root", "", "sample_db");
$sql = "SELECT id, name, age FROM users";
$result = $conn->query($sql);

$data = [];
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}

echo json_encode($data, JSON_PRETTY_PRINT);
?>

結論

  • SQLのクエリで直接JSONを取得する方法(MySQL, PostgreSQL, SQL Server)
  • プログラム(Python, JavaScriptなど)でJSONに変換する方法
  • API経由でSQLのデータをJSONに変換する方法

どの方法を使うかは、環境や用途によりますが、「データをアプリで使いたい」なら プログラムでJSON化 するのが一般的です。
どの方法を使うか迷っているなら、目的を教えてもらえれば最適な方法を提案できます!