在位置 0 的 JSON 中出现意外的语法错误 <

Posted

技术标签:

【中文标题】在位置 0 的 JSON 中出现意外的语法错误 <【英文标题】:getting syntax error unexpected < in JSON at position 0 【发布时间】:2022-01-10 02:54:36 【问题描述】:

我在这个程序中没有任何 JSON 文件,只有 js 和 html 我的理论是程序运行 html 就像一个 JSON 文件我正在使用 replit 和 kaboom 来运行游戏

HTML 代码:

<!DOCTYPE html>

<html>

<head>
    <title>kaboom</title>
    <meta charset="utf-8">
    <style>
        * 
            margin: 0;
        
        html,
        body 
            width: 100%;
            height: 100%;
            overflow: hidden;
        
        canvas 
            display: block;
        
    </style>
</head>

<body>
kaboom
</body>

</html>

js代码:

import kaboom from "kaboom";

// initialize context
kaboom();
scene();
const SPEED = 320
var METEORX = 2
const NiceX = 20
//onsole.log(str(METEORX))
// load assets
loadSprite("grass", "sprites/grass.png");
loadSprite("Player", "sprites/Player.png");
loadPedit("meteor", "sprites/meteor.pedit");
loadPedit("air Meteor", "sprites/air Meteor.pedit");
// add a character to screen
const meteor = add ([
  sprite("air Meteor"),
  pos(rand(0, width()), 40),
  area(),
  move(DOWN, 300),
  "meteor",
  "enemy",
  cleanup(20)
])

var player = add([
  // list of components
  "player",
  sprite("Player"),
  pos(center()),
  area(),
  body(),
  health(3)
]);
add([
    rect(width(), 48),
    "ground",
  pos(0, height() - 48),
    outline(4),
    area(),
    solid(),
    color(127, 200, 255),
])
onCollide("player", "enemy", () => 
  
  player.hurt(1.5)
  
    
)
loadPedit("ground meteor", "sprites/ground meteor.pedit");
var difficulty = 5;

onCollide("enemy", (niceMeteor) => 
  addExplosion()
  destroy(niceMeteor)
)
onKeyPress("space", () => 
  if (player.grounded()) 
    player.jump()
  
) 
onKeyDown("d", () => 
  player.move(SPEED, 0)
)

onKeyDown("a", () => 
  player.move(-SPEED, 0)
)

【问题讨论】:

从您的问题中不清楚是什么触发了错误。你能提供更多细节吗? (这就是为什么堆栈溢出要求文本与代码一起包含在问题中,以后请不要用垃圾邮件绕过它) 【参考方案1】:

最可能的情况是您指定的精灵之一不存在。在这种情况下,您还应该看到一个错误:ERROR: sprite not found: "&lt;your sprite name here&gt;"。 (我认为在这种情况下,kaboom 试图将响应解析为 JSON 是一个错误,因为它得到了内容类型为 text/html 的 404 响应)。

另一种可能性(无论多么不可能)是您的一个精灵文件已损坏。 Kaboom的.pedit文件格式其实是一个JSON文件,图片数据嵌入为base64:


  "version": "1",
  "width": 32,
  "height": 32,
  "palette": [[0,0,0,255],[255,255,255,255],[255,255,128,255],[255,128,255,255],[0,128,128,255],[128,0,255,255],[255,0,128,255],[0,255,255,255]],
  "anims": 
    "Test": "from":0,"to":1,"loop":true
  ,
  "frames":[
    "data:image/png;base64,...",
    "data:image/png;base64,..."
  ]

因此,如果其中一个文件在编辑过程中损坏,也可能导致此错误。通常为了弄清楚这一点,我建议您查看堆栈跟踪以查找正在抛出的错误,该错误在您的 Web 浏览器的开发人员控制台中可见。但是,Kaboom 不会为对loadPedit 的调用生成良好的堆栈跟踪。所以你最好的选择可能是在每次加载调用之前放置一些console.log('loading sprite XXX') 语句。一旦您知道哪个 pedit 文件无效,您可以将该文件从 whatever.pedit 重命名为 whatever.json 并检查您的 repl 中的内容。

【讨论】:

以上是关于在位置 0 的 JSON 中出现意外的语法错误 <的主要内容,如果未能解决你的问题,请参考以下文章

在附近解析时,位置 XXX 处 JSON 中出现意外标记的错误

渲染中的 Laravel + Vue 错误:“SyntaxError:JSON 中位置 0 的意外标记 u”

渲染中的 Laravel + Vue 错误:“SyntaxError:JSON 中位置 0 的意外标记 u”

使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌'

React Native - JSON中位置0的意外令牌U

“SyntaxError:意外的令牌 < 在 JSON 中的位置 0”