繁体   English   中英

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

[英]SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data?

谁能告诉我为什么从硬盘驱动器访问数据时,此代码为什么能在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');
});

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

我认为最重要的是,您需要确保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;

您的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;

您的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>     

最后,确保将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM