SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符吗?

bar*_*urn 1 javascript json fetch express

谁能告诉我为什么从硬盘驱动器访问数据时,此代码为什么能在HTML页面中完美地工作,但是当我将其添加到express和node中时,却得到了

SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符

具有完美格式的代码。我知道我使用格式化程序对其进行了测试,甚至手动创建了一个json对象。这是代码:

<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>
But then this code in express causes the error- same exact file that worked perfectly before ran thru express now causes this error: 
**"index.ejs"**

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

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

    <script>

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


            function getProperty() {
                /*fetch('sample.txt')
                .then(function(res) {
                    return res.text();
                })
                .then(function(data){
                    console.log(data);
                });*/
                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');
});
Run Code Online (Sandbox Code Playgroud)

任何想法,为什么在访问文件夹时,或者在我手动创建文件并将其保存到硬盘驱动器后,在纯HTML中都可以正常工作,但是一旦我将它放入Express或尝试访问API,数据就来自(最终目标)错误SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符

Eri*_*ric 5

我认为最重要的是,您需要确保JSON文件可访问/可加载,然后确保它是有效的。这是一个最小的工作示例。您的app.js应该很简单:

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;
Run Code Online (Sandbox Code Playgroud)

您的route / index.js很简单:

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;
Run Code Online (Sandbox Code Playgroud)

您的views / index.ejs应该是:

<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>     
Run Code Online (Sandbox Code Playgroud)

最后,确保将JSON文件保存在./public/2016-regular.json。这是我的:

{“ item1”:“ value1”,“ item2”:“ value2”,“ item3”:“ value3”}

测试1 将浏览器指向http:// localhost:3000 / 2016-regular.json,请确保您的JSON文件可访问 (请注意,如果您在其他端口上运行,则可能必须更改端口)。

测试2导航到http:// localhost:3000 /,然后单击按钮。文件内容应出现在结果div中。

完整的工作代码可以在这里找到。只需克隆存储库,然后

cd exp1
npm install
npm start
Run Code Online (Sandbox Code Playgroud)