Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SyntaxError:/Users/3x7r3m157/Development/Javascript/db.json:json输入意外结束_Javascript_Node.js_Json_Yargs - Fatal编程技术网

SyntaxError:/Users/3x7r3m157/Development/Javascript/db.json:json输入意外结束

SyntaxError:/Users/3x7r3m157/Development/Javascript/db.json:json输入意外结束,javascript,node.js,json,yargs,Javascript,Node.js,Json,Yargs,在这个bug中,我似乎找不到,我正在读取一个名为db.json的.json文件,更新json并尝试写入.json文件。虽然我正在解析和字符串化json,但我得到了以下错误: SyntaxError:/Users/3x7r3m157/Development/Javascript/db.json:json输入意外结束 我的代码如下: const args = require('yargs').argv; const fs = require('fs'); const util = require('

在这个bug中,我似乎找不到,我正在读取一个名为db.json的.json文件,更新json并尝试写入.json文件。虽然我正在解析和字符串化json,但我得到了以下错误:

SyntaxError:/Users/3x7r3m157/Development/Javascript/db.json:json输入意外结束

我的代码如下:

const args = require('yargs').argv;
const fs = require('fs');
const util = require('util');
const leaderboard = require('./db.json')

const addCompetitor = (name) => {
  leaderboard[name] = { points: [], times: [] }
  console.log(leaderboard)
  return leaderboard
}

console.log(leaderboard)

const addCompetitorTimes = (data) => {
  console.log(data)
  //this method takes a string of 'competitorName_time'
  //parses it into substrings 'name' & 'time'.

  //Afterwards it iterates through time in minutes and seconds as a string
  //in the format of '00:00', then parses the string into substrings
  //of minutes and seconds delimited by the ':' character.
  //Thereafter it converts the string to integeters and converts the time
  //into time in seconds for easy comparison of times.

  //Finally it assigns the time to the competitor in the leaderboard and
  //writes to json file db.json

  let parser = 0;
  var competitor = '';
  let times = '';
  let seconds = '';
  let minutes = '';
  let timeInSeconds = 0;

  for (let i = 0 ; i < data.length ; i ++) {
    if (parser == 0 && data[i] == '_') {
      parser ++
      continue
    }
    if (parser == 0) {
      //Stack Overflow peeps, weird error right hurrr:
      competitor += data[i]
    }
    if (parser == 1) {
      times += data[i]
    }
  }

  parser = 0

  for (let i = 0 ; i < times.length ; i ++) {
    if (parser == 0 && times[i] == ':') {
      parser ++
      continue
    }
    if (parser == 0) {
      minutes += times[i]
    }
    if (parser == 1) {
      seconds += times[i]
    }
  }

  seconds = parseInt(seconds);
  minutes = parseInt(minutes);

  let minutesInSeconds = minutes * 60

  seconds = minutesInSeconds + seconds
  leaderboard[competitor].times = seconds

  console.log(leaderboard)

  fs.writeFileSync('./db.json', JSON.stringify(leaderboard));

  return leaderboard
}

addCompetitorTimes(args.competitorTimes)
完整堆栈跟踪出错:

internal/modules/cjs/loader.js:800
    throw err;
    ^

SyntaxError: /Users/3x7r3m157/Development/Javascript/db.json: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at Object.Module._extensions..json (internal/modules/cjs/loader.js:797:27)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/Users/3x7r3m157/Development/Javascript/leaderboard.js:4:21)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)

问题是require为您解析json,但您使用json.parse对其进行冗余解析。它已经是一个对象,但此操作失败。只是不要重复解析。需要就足够了。

您正在编辑仍在阅读的文件。首先更改路径的名称,我还建议在使用JSON或读/写文件时始终使用try-catch:

  try {
   fs.writeFileSync(require.resolve('./new-db.json')), JSON.stringify(leaderboard));    
  } catch (error) {
    console.log(error)
  }

错误在JSON中。但是你没有发布,所以没有人能告诉你问题是什么。Goodpoint,谢谢你…将用json文件更新谢谢!我做了双重分析,还是没有骰子?将更新我问题中的代码以反映更改。请粘贴完整的错误,因为您现在收到它。行号,所有这些都可以。我只是更新了问题,以包含完整堆栈跟踪的错误。它拒绝json文件本身,因此这与您的其余代码无关。我怀疑您粘贴的json与文件中的内容不完全相同,因为您粘贴的内容看起来很好。网站上有几个不错的json调试器站点,您可以粘贴到其中进行检查。谢谢!然而不幸的是,这个解决方案仍然给了我同样的错误。还有一种方法可以读写同一个文件吗?这是一个每天都会随着排行榜分数和次数的变化而不断更新的文件。如果连续更新,则在写入过程中读取和写入同时发生时,可能会发生冲突,从而破坏该文件。这可能需要很长时间,但最终会丢失数据。您可以使用锁模块包装这些调用,但实际上此时应该使用数据库。这就是他们在那里的目的:
  try {
   fs.writeFileSync(require.resolve('./new-db.json')), JSON.stringify(leaderboard));    
  } catch (error) {
    console.log(error)
  }