Error in parsing JSON: Unforeseen character encountered at the beginning of the JSON data

Why does this code work seamlessly on an HTML page when retrieving data from my hard drive, but as soon as I incorporate it into express and node, I encounter a

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

, even though the code is perfectly formatted. I've checked it with a formatter and manually created a json object. Below is the code snippet:

<html>
    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta name="description" content="">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <title>Untitled</title>
        </head>
        <body>

    <div id="output"></div>

          <button id="getProperty">Get Property</button>

          <script>
            document.getElementById('getProperty').addEventListener('click', getProperty);


            function getProperty() {
                fetch('2016-regular.json')
                .then((res) => res.json())
                .then((data) => {
                    let output = '<h2>Property</h2>';
                    console.log(data);
                    data.propertystandings.propertystandingsentry.forEach(function(propertyEntry){
                        output += `
                            <ul>
                                <li>id: ${propertyEntry.property.ID}</li>
                                <li>city: ${propertyEntry.property.City}</li>
                                <li>prop name: ${propertyEntry.property.Name}</li>
                                <li>prop name: ${propertyEntry.rank}</li>
                            </ul>
                        `;
                    });
                document.getElementById('output').innerHTML = output;
                })
            }
          </script>

        </body>
    </html>
</html>
</html>
The same code that worked flawlessly in plain HTML now generates errors within Express:<br> **"index.ejs"**

    <div id="output"></div>

          <button id="getProperty">Get Property</button>

    <script>

            document.getElementById('getProperty').addEventListener('click', getProperty);


            function getProperty() {
                fetch("2016-regular.json")
                .then((res) => res.json())
                .then((data) => {
                    console.log(data);//**won't even read the data without that error**
                });
            }
    </script>


**Express Code**
var express = require('express');
// var bodyParser = require('body-parser');
var cors = require('cors');
var path = require('path');

var app = express();

app.use(bodyParser());
app.use(cors());

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.get('/', function (request, response) {
    response.render('index.ejs');
});

app.listen(8000, function() {
    console.log('running on 8000');
});

Can you shed some light on why this setup functions smoothly in regular HTML when pulling data locally or when the file is manually saved, yet encounters the SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data issue once integrated into Express or when accessing the final API source for this data retrieval?

Answer №1

To ensure that your JSON file is accessible and valid, follow these steps to set up a working example:

var express = require('express');
var index = require('./routes/index');
var app = express();

app.set('views', 'views');
app.set('view engine', 'ejs');

app.use(express.static('public'));

app.use('/', index);

module.exports = app;

Your routes/index.js should look like this:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

In your views/index.ejs file, include the following code:

<html>
<body>
  <div id="output">JSON contents will appear here.</div>  
  <button id="getProperty">Click to load JSON</button>

  <script>
      document.getElementById('getProperty').addEventListener('click', getProperty);  
      function getProperty() {
          fetch("./2016-regular.json")
          .then((res) => res.json())
          .then((data) => {
              document.getElementById('output').innerHTML = JSON.stringify(data);
          });
      }
  </script>
</body>
</html>     

Ensure your JSON file is saved at ./public/2016-regular.json with content similar to this:

{ "item1": "value1", "item2": "value2", "item3": "value3" }

TEST 1: Access your JSON file by visiting http://localhost:3000/2016-regular.json in your browser.

TEST 2: Navigate to http://localhost:3000/, click the button, and confirm that the file contents display in the results div.

You can find the complete working code on GitHub. Simply clone the repository, then run:

cd exp1
npm install
npm start

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

The problem with React useState not updating could be due to useRef interference

I'm facing a strange issue with my React code: the useState function is not updating the view, despite trying everything to fix it. To illustrate the problem, I have created a simple example: function(){ const [enterJob, setEnterJob] = useSt ...

Show pictures directly from multipart/form-data parsers without the need to save them

Within this inquiry, the process involves saving images uploaded via multipart/form-data parsers in a temporary folder using const tempPath = req.file.path. Subsequently, these images are then transferred to a designated directory using const targetPath = ...

Using Javascript to link various arrays filled with file paths and transforming them into an object in a distinctive manner

I've tried countless times to make it work, but it just doesn't seem to work... I have an array that contains multiple other arrays: let arr = [ ["Users"], ["Users", "john"], ["Users", "john", "Desktop"], ["Users", "john", "Docum ...

What causes objects to intersect in A-Frame even when they are seemingly distanced from each other?

My charts appear in front of a globe object in A-Frame, but when I move the camera in the scene, the order of objects changes causing the charts to overlap and become invisible. I'm unsure of the cause and how to fix it. Here are some screenshots of t ...

Unfortunately, we encountered an AJAX error while trying to access data from the website datatables.net. You can find

I'm currently working on adding data to a datatables.net datatable using a JSON response, following the example provided here. To achieve this, I am making use of an AJAX call to fetch a JSON response from a database. After obtaining the data, I uti ...

Can React provide custom styling to a specific segment of text before displaying it?

I'm looking to create a pokemon search box that offers suggestions of pokemons as the user types. It's working fine so far, but I also want to highlight the searched text when displaying the entire pokemon name. Basically, I want to replace the ...

Retrieving information from a React form and sending it to an Express.js server

I am currently attempting to transfer data from a React form to Express.js using POST. I have included some axios code in my React code, but I am uncertain if it is necessary. At the moment, my goal is to simply log the form data in Express.js, but I am e ...

Troubleshooting problems with file uploads on Multer in conjunction with a Node.js and MongoDB

I have developed an application using node js, react js, and mongodb. I am trying to implement file uploading functionality using multer, but I am facing issues with getting the files uploaded successfully. I have shared the code snippets related to both f ...

Showing a dynamically updated array in Angular

Within my Angular Application I am utilizing an ngFor loop in the component to display an array. Now, I am filtering the data from the array and aiming to update the newly filtered array in place of the original one. While I can successfully display the ...

What is the process for exporting individual nested values to separate files in MongoDb?

I am facing a situation with this tree structure: Document |--_id: ObjectId(21346f7b7ada873) |--a : "valueA" |--b : "valueb" |--c : | |-- ca : "ca" | |-- cb : "cb" | |-- cc : {...} | |-- cd : [...] | |-- ce : {...} | |-- cf : {...} . . . Suppo ...

Tips for adding an array to a formData: incorporating an array with two values along with their corresponding keys

Snippet : const options = new RequestOptions({ headers: headers }); let myArray; myArray = [{ "subfolder_name": subfolder, "file_upload": file }]; let formData: FormData = new FormData(); formData.append("folder_name",folder ); formData.append("counse ...

Using Typescript and react-redux with a Stateful Component: The parameter type 'typeof MyClass' does not match the expected component type

I've been trying to dive into the world of Typescript, React, and Redux. However, I've hit a roadblock at the moment. This is the error I encountered: ./src/containers/Hello.tsx [tsl] ERROR in /home/marc/Development/TypeScript-React-Starte ...

Pondering in AngularJS - what is the best way to alter the DOM during an AJAX call?

I'm completely new to AngularJS and trying to transition from a jQuery background. After reading through "Thinking in AngularJS if I have a jQuery background?" on Stack Overflow, I understand the concept but am struggling to implement it without depen ...

Setting an object as nullable in Javascript (NodeJS): A Step-by-Step Guide

I am encountering the following error message: TypeError: Cannot read property 'doors' of null. My objective is to make the value of doors nullable in order to avoid this error and instead receive a 404 response. However, I am uncertain about the ...

Tips for simulating an axios request that returns an image buffer

I am attempting to simulate an axios api call that returns an image buffer as shown below: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff e1 00 de 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 06 00 12 01 03 00 01 00 00 00 01 00 ... ...

Why isn't the jQuery function being triggered from an Angular callback?

Here is the code snippet that I am currently working with: $http({method: 'GET', url: 'api/participants/areyouhuman'}) .success(function(data, status, headers, config) { console.log(data); $( ...

Exploring the possibility of integrating direct search functionality into the URL bar within an Angular application

One interesting feature I observed on GitHub is that after typing "github.com" in the URL bar, you can directly search by pressing the spacebar, which activates the "search mode." Here's how it looks like on Chrome: https://i.sstatic.net/XIgJu.png I ...

What strategies can I implement to prevent duplicate entries while utilizing pagination with MongoDB?

I have been working on a blog web application where I aim to showcase posts on the main page. Currently, I am using MongoDB to fetch posts based on tags. My goal is to have the content on the home page appear random and diverse, incorporating both the lat ...

Creating a React render method that relies on both asynchronous requests and state changes

Currently, I am immersing myself in the world of ReactJS and Redux. However, I have encountered a hurdle that seems insurmountable to me. In one of my projects, I have a React component that is responsible for fetching data asynchronously. export class M ...

Error: Attempting to access 'title' property of undefined object leads to Uncaught TypeError

I am attempting to extract content from a Google Blogger Feed that can be found at this link. I am using JavaScript code from here. When inspecting the elements, I encountered a specific red warning message: Uncaught TypeError: Cannot read property ' ...