如何从命令行向Node.js脚本传递JSON?JSON.parse解析报错问题求助
解决命令行传递JSON到Node.js脚本的解析错误
嗨,我来帮你搞定这个问题!你遇到的Unexpected token ' in JSON at position 1错误,核心原因是你传递的不是合法的JSON格式——JSON语法规范强制要求所有的键和字符串值必须用双引号(")包裹,而你用的是单引号('),这是JavaScript对象字面量的写法,但不符合JSON的标准,所以JSON.parse直接报错了。
下面一步步给你解决方法:
1. 修正命令行的JSON格式
首先要把传递的JSON改成合法格式,同时注意命令行的引号转义(不同终端的处理方式略有不同):
- 在类Unix终端(bash/zsh等):直接用单引号包裹整个JSON字符串,内部用双引号
node index.js '{"foo":"ball"}'
- 在Windows CMD:需要转义双引号
node index.js "{\"foo\":\"ball\"}"
- 在Windows PowerShell:用单引号包裹即可
node index.js '{"foo":"ball"}'
2. 修改Node.js脚本,添加解析逻辑和错误处理
你现在的代码只是打印了参数,还没执行解析,建议加上try/catch来捕获解析错误,方便调试:
var args = process.argv; var jsonStr = args[2]; console.log("Received JSON string:", jsonStr); console.log("Type:", typeof jsonStr); try { // 解析合法的JSON字符串 var parsedData = JSON.parse(jsonStr); console.log("\nParsed result:", parsedData); console.log("Parsed type:", typeof parsedData); } catch (error) { console.error("\nParse error:", error.message); }
执行上面的命令后,你就能看到成功解析后的对象了。
3. 可选:避免命令行转义的替代方案
如果觉得命令行传递JSON的转义太麻烦,推荐把JSON内容放到单独的文件里,比如创建data.json:
{"foo":"ball"}
然后修改脚本读取文件内容:
const fs = require('fs'); try { // 读取文件并解析 const jsonContent = fs.readFileSync('./data.json', 'utf8'); const parsedData = JSON.parse(jsonContent); console.log("Parsed data:", parsedData); } catch (error) { console.error("Error:", error.message); }
执行时直接运行node index.js即可,不用传递任何参数,更省心。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

