·6 min read
JSON in Machine Learning: Data Preparation and Model Integration
JSON is a fundamental data format in machine learning workflows. From dataset storage and feature engineering to model configuration and prediction outputs, JSON appears at every stage of the ML pipeline. This guide covers JSON usage in ML datasets, feature stores, model serialization, configuration management, and integration with popular ML frameworks. Use our JSON Formatter to inspect ML datasets and JSON Validator to check data quality.
JSON in the ML Pipeline
| Stage | JSON Usage | Example |
|---|---|---|
| Data collection | Raw data ingestion (logs, API responses, sensor data) | NDJSON event streams |
| Data preparation | Feature definitions, preprocessing configs | Feature metadata JSON |
| Dataset storage | Labeled datasets, annotation files | COCO JSON, NLG datasets |
| Model training | Hyperparameters, training configuration | JSON config files |
| Model evaluation | Metrics, test results | JSON metrics output |
| Model serving | Prediction requests and responses | JSON API payloads |
| MLOps | Pipeline definitions, experiment tracking | MLflow/Metaflow JSON configs |
JSON as ML Dataset Format
// Standard ML dataset in JSON
{
"dataset": "Sentiment Analysis",
"version": "2.1",
"samples": [
{
"id": "train_001",
"text": "This product is amazing!",
"label": "positive",
"metadata": {
"source": "twitter",
"timestamp": "2025-01-15T10:00:00Z",
"language": "en"
}
},
{
"id": "train_002",
"text": "Terrible customer service.",
"label": "negative",
"metadata": {
"source": "review",
"timestamp": "2025-01-15T10:05:00Z",
"language": "en"
}
}
],
"metadata": {
"total_samples": 2,
"label_distribution": {
"positive": 1,
"negative": 1
}
}
}
NDJSON for Large ML Datasets
// For large datasets (100K+ samples), use NDJSON
// Each line is one sample - can be streamed and processed in parallel
// File: sentiment_dataset.ndjson
{"id": "train_001", "text": "Great product!", "label": "positive"}
{"id": "train_002", "text": "Very disappointed", "label": "negative"}
{"id": "train_003", "text": "Works as expected", "label": "neutral"}
// Python: Streaming processing
import json
def load_ndjson_dataset(filepath):
with open(filepath, 'r') as f:
for line in f:
if line.strip():
yield json.loads(line)
# Process in batches
batch_size = 1000
current_batch = []
for sample in load_ndjson_dataset('train.ndjson'):
current_batch.append(sample)
if len(current_batch) >= batch_size:
process_batch(current_batch)
current_batch = []
// Use our /json-formatter to inspect individual records
Model Configuration as JSON
// ML model hyperparameters as JSON config
{
"model": {
"type": "random_forest",
"hyperparameters": {
"n_estimators": 100,
"max_depth": 10,
"min_samples_split": 5,
"min_samples_leaf": 2,
"max_features": "sqrt",
"random_state": 42
}
},
"training": {
"batch_size": 32,
"epochs": 50,
"learning_rate": 0.001,
"optimizer": "adam",
"validation_split": 0.2,
"early_stopping": {
"patience": 5,
"min_delta": 0.001
}
},
"data": {
"train_path": "data/train.ndjson",
"validation_path": "data/val.ndjson",
"feature_columns": ["text_tfidf", "word_count", "sentiment_score"],
"target_column": "label"
}
}
// Load config in Python
import json
with open('config.json') as f:
config = json.load(f)
model_params = config['model']['hyperparameters']
model = RandomForestClassifier(**model_params)
Feature Store JSON Format
// Feature definition in a feature store
{
"features": [
{
"name": "user_total_orders",
"type": "integer",
"description": "Total number of orders placed by user",
"source": "orders_db",
"granularity": "per_user",
"freshness": "1h",
"statistics": {
"min": 0,
"max": 1500,
"mean": 45.3,
"std": 120.1
}
},
{
"name": "user_avg_order_value",
"type": "float",
"description": "Average order value in USD",
"source": "orders_db",
"granularity": "per_user",
"freshness": "1h"
}
]
}
Model Prediction Input/Output
// Prediction request (JSON)
POST /predict
{
"instances": [
{
"features": {
"user_total_orders": 45,
"user_avg_order_value": 89.50,
"days_since_last_order": 3
}
},
{
"features": {
"user_total_orders": 2,
"user_avg_order_value": 150.00,
"days_since_last_order": 60
}
}
]
}
// Prediction response (JSON)
{
"predictions": [
{
"probability": 0.87,
"predicted_class": "churn_risk",
"confidence": 0.87,
"explanation": {
"feature_importance": {
"days_since_last_order": 0.45,
"user_avg_order_value": 0.30,
"user_total_orders": 0.25
}
}
},
{
"probability": 0.12,
"predicted_class": "active",
"confidence": 0.88
}
],
"metadata": {
"model_version": "v2.1.0",
"latency_ms": 45
}
}
JSON Best Practices for ML
- Use NDJSON for datasets larger than 100MB (streaming, parallel processing)
- Validate all dataset JSON with JSON Validator before training
- Flatten nested JSON before feeding to ML models — most models expect flat feature vectors
- Use JSON Schema to define and validate dataset structure
- Store hyperparameters in JSON config files for experiment reproducibility
- Compress JSON datasets with JSON Compress for storage efficiency
- For feature engineering, convert JSON to columnar format (Parquet/Arrow) for performance
Next Steps
Inspect ML datasets with JSON Formatter. Validate data quality with JSON Validator. Compress large datasets with JSON Compress. Convert to other formats with JSON to CSV.