Skip to content

Working with JSON Data from Database in JavaScript

By Jasper Frumau

When working with web applications, it’s common to store complex data structures as JSON strings in databases. This approach is particularly useful when you need to store nested objects, arrays, or dynamic schemas that don’t fit well into traditional relational database columns.

The Challenge

Databases typically store JSON data as text/string columns rather than native JSON objects. This means when you retrieve this data in your JavaScript application, you’ll receive it as a string that needs to be converted back into a usable JavaScript object.

Basic JSON Parsing Approach

Here’s how to handle JSON data retrieved from a database:

for(var i = 0; i < modules.length; i++) {
    var moduleJSON = modules[i].json; // JSON string from database
    var parsedModule = JSON.parse(moduleJSON); // Converted to JavaScript object
    
    // Now you can work with the parsed object
    console.log(parsedModule.name);
    console.log(parsedModule.settings.theme);
}

In this example:

  • modules represents an array of data objects retrieved from your database
  • Each module object contains a json property that holds the JSON string
  • JSON.parse() converts the string into a usable JavaScript object

Important Considerations

Error Handling

Always wrap JSON.parse() in a try-catch block to handle malformed JSON:

for(var i = 0; i < modules.length; i++) {
    try {
        var moduleJSON = modules[i].json;
        var parsedModule = JSON.parse(moduleJSON);
        // Process your data here
    } catch (error) {
        console.error('Invalid JSON in module', i, ':', error.message);
        // Handle the error appropriately
    }
}

Validation

Check if the JSON string exists and isn’t empty before parsing:

for(var i = 0; i < modules.length; i++) {
    var moduleJSON = modules[i].json;
    
    if (moduleJSON && moduleJSON.trim() !== '') {
        try {
            var parsedModule = JSON.parse(moduleJSON);
            // Process your data here
        } catch (error) {
            console.error('Failed to parse JSON:', error.message);
        }
    }
}

Modern JavaScript Alternatives

Using forEach (ES5+)

modules.forEach(function(module, index) {
    if (module.json) {
        try {
            var parsedModule = JSON.parse(module.json);
            // Process data
        } catch (error) {
            console.error(`Invalid JSON at index ${index}:`, error.message);
        }
    }
});

Using for…of loop (ES6+)

for (const module of modules) {
    if (module.json) {
        try {
            const parsedModule = JSON.parse(module.json);
            // Process data
        } catch (error) {
            console.error('Invalid JSON:', error.message);
        }
    }
}

Using map() for transformation (ES6+)

const parsedModules = modules
    .filter(module => module.json)
    .map(module => {
        try {
            return JSON.parse(module.json);
        } catch (error) {
            console.error('Invalid JSON:', error.message);
            return null;
        }
    })
    .filter(module => module !== null);

Common Use Cases

This pattern is frequently used when:

  • Storing user preferences or settings
  • Saving form configurations
  • Storing API responses for caching
  • Managing dynamic content structures
  • Handling polymorphic data that doesn’t fit a fixed schema

Performance Tips

  • Consider parsing JSON data only when needed rather than parsing everything upfront
  • For large datasets, consider using Web Workers for JSON parsing to avoid blocking the main thread
  • Cache parsed objects if they’ll be accessed multiple times

Remember that JSON.parse() creates a new object each time it’s called, so avoid unnecessary repeated parsing of the same JSON string.

Comments are closed for this post.