How to communicate JSON data between Python and Node.js?

JSON (JavaScript Object Notation) is a lightweight text-based format for transferring and storing data between different programming languages. Python provides built-in JSON support through the json module, while Node.js has native JSON parsing capabilities.

To communicate JSON data between Python and Node.js, we typically use HTTP requests where one service acts as a server and the other as a client. This enables seamless data exchange between the two platforms.

Installing Required Dependencies

For Python, install Flask to create a web server:

pip install flask requests

For Node.js, install the request-promise module:

npm install request-promise

Method 1: Python Server to Node.js Client

Creating a Python Flask Server

First, create a Python server that sends JSON data:

from flask import Flask, jsonify
import json

app = Flask(__name__)

@app.route('/api/data', methods=['GET'])
def get_data():
    data = {
        "languages": ["Python", "JavaScript", "Java"],
        "years": [1991, 1995, 1995],
        "popularity": [85, 92, 78]
    }
    return jsonify(data)

if __name__ == '__main__':
    app.run(host='localhost', port=5000, debug=True)

Node.js Client to Fetch Data

Create a Node.js script to fetch JSON data from the Python server:

const http = require('http');

// Make GET request to Python server
const options = {
  hostname: 'localhost',
  port: 5000,
  path: '/api/data',
  method: 'GET'
};

const req = http.request(options, (res) => {
  let data = '';
  
  res.on('data', (chunk) => {
    data += chunk;
  });
  
  res.on('end', () => {
    const jsonData = JSON.parse(data);
    console.log('Received from Python:', jsonData);
  });
});

req.on('error', (error) => {
  console.error('Request error:', error);
});

req.end();

Method 2: Node.js Server to Python Client

Creating a Node.js Server

Create a Node.js server that provides JSON data:

const http = require('http');

const server = http.createServer((req, res) => {
  if (req.method === 'GET' && req.url === '/api/data') {
    const data = {
      frameworks: ["Express", "Django", "Spring"],
      types: ["Node.js", "Python", "Java"],
      performance: [95, 88, 82]
    };
    
    res.writeHead(200, {
      'Content-Type': 'application/json',
      'Access-Control-Allow-Origin': '*'
    });
    res.end(JSON.stringify(data));
  }
});

server.listen(3000, () => {
  console.log('Node.js server running on port 3000');
});

Python Client to Fetch Data

Create a Python script to fetch JSON data from the Node.js server:

import requests
import json

try:
    response = requests.get('http://localhost:3000/api/data')
    
    if response.status_code == 200:
        json_data = response.json()
        print("Received from Node.js:")
        print(json.dumps(json_data, indent=2))
    else:
        print(f"Error: {response.status_code}")
        
except requests.exceptions.RequestException as e:
    print(f"Request failed: {e}")
Received from Node.js:
{
  "frameworks": [
    "Express",
    "Django", 
    "Spring"
  ],
  "types": [
    "Node.js",
    "Python",
    "Java"
  ],
  "performance": [
    95,
    88,
    82
  ]
}

Method 3: Bidirectional Communication

For POST requests where Python sends data to Node.js:

import requests
import json

data = {
    "user": "john_doe",
    "action": "login",
    "timestamp": "2024-01-15T10:30:00Z"
}

headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
}

try:
    response = requests.post(
        'http://localhost:3000/api/process',
        data=json.dumps(data),
        headers=headers
    )
    
    if response.status_code == 200:
        result = response.json()
        print("Server response:", result)
        
except Exception as e:
    print(f"Error: {e}")
Server response: {'status': 'success', 'message': 'Data processed successfully'}

Key Considerations

Aspect Python (json module) Node.js (JSON object)
Parsing json.loads() JSON.parse()
Serializing json.dumps() JSON.stringify()
HTTP Library requests http / axios

Conclusion

JSON communication between Python and Node.js is straightforward using HTTP requests. Python's requests library and Node.js's built-in http module provide reliable methods for data exchange. Always handle errors gracefully and validate JSON data before processing.

Updated on: 2026-03-27T11:39:17+05:30

737 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements