【问题标题】:Error in parsing json array accepting multiple values解析接受多个值的json数组时出错
【发布时间】:2014-03-10 08:19:12
【问题描述】:

每当我在我的 json 文件中提供单个数据元素时,我的代码都可以正常工作,但是一旦我提供一个元素数组,它开始在客户端显示未定义。 这是我的服务器端代码。

var app = require('express')()
  , server = require('http').createServer(app)
  , io = require('socket.io').listen(server);
var fs= require('fs');
server.listen(3000);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/cli_index.html');
});

io.sockets.on('connection', function (socket) {
var file = __dirname + '/data.json';
  fs.readFile(file, 'utf8', function (err, data) {
    if (err) {
      console.log('Error: ' + err);
      return;
    }
    data = JSON.parse(data);
  // You can save those values somewhere or just log them to the console
    console.log(data);
    socket.emit('news', { hello: data});
 });

  });

这是我的客户端代码。

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {

 JSON.stringify(data);
  for(var i=0;i<2;i++){
   document.write(data[i].hello.name);
}
  });

</script>

这是我的外部 json 文件。

[{"name":"hey"},{"name":"Gouraw"}]

【问题讨论】:

    标签: json node.js express client-server webclient


    【解决方案1】:

    在此服务器端代码中:

    socket.emit('news', { hello: data});
    

    ...您将数组作为对象的 hello 属性发送,但此客户端代码:

    document.write(data[i].hello.name);
    

    ...期望顶层是一个数组,每个条目都有单独的 hello 属性。将其更改为:

    document.write(data.hello[i].name);
    

    ...所以你正在索引到数组中。

    最好也使用数组的length 而不是硬编码值来限制循环:

     for(var i=0;i<data.hello.length;i++){
    

    【讨论】:

    • @GyaneshGouraw:很高兴为您提供帮助。查看您的问题列表,您似乎不知道在 SO 上,如果一个答案回答您的问题,您使用复选标记“接受”答案它的左边。详细信息:meta.stackexchange.com/questions/5234/…(仅当答案确实回答了您的问题时。)
    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多