为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript - 从变量加载 json

Javascript - 从变量加载 json

杨__羊羊 2023-06-29 15:53:56
metaModelSrc:“myfile.json” - 工作得很好,但我需要一个变量而不是 Api 接收 - 一个 json 对象。theat 意味着你可以执行 metaData.name 并且它会显示它当您将 stringify 复制粘贴到 json 文件并给出路径文件时,它正在工作。当您下载 blob 并将其作为路径 file.json 提供时,它确实有效 - 我需要从代码加载它而不下载 blob我的错误:metaModelSrcFailed to load model metadata for model 'fsfdsfsdfs from  'application/json' - utils.loadJSON(): Failed to parse JSON response - SyntaxError: Unexpected token < in JSON at position 0我尝试过字符串化,但没有成功;我尝试将其转换为文件,但没有成功。我已经从一个 blob 下载了它,并且给了它一个路径 metaModelSrc: "..../myfile.json" 并且它确实有效。但我需要从变量而不是路径加载它,而且我对下载 blob 不感兴趣,我需要使用从 api 获取的数据。// metaData - json object from apiconst metaDatastringify= JSON.stringify(metaData);var file = new Blob([metaDatastringify], {type: 'application/json'});var file1 = new File([file], "name", {type: 'application/json'});    gltfLoader.load({      id: "fsfdsfsdfs",      metaModelSrc: file1,      edges: true,      performance: true,    });
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

const urlTestJsonModel = URL.createObjectURL(file);

metaModelSrc: urlTestJsonModel 解决了我的问题:) 谢谢大家的帮助


查看完整回答
反对 回复 2023-06-29
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

错误消息“Unexpected token < in JSON atposition 0”始终表示特定类型的错误

起初我以为是JSON.stringify,但这当然是错误的。我们错误地将注意力集中在以下几行上:


const metaDatastringify= JSON.stringify(metaData);

...因此关于元数据的内容。


容易出错的并不是字符串化。你可以用 JSON.stringify 几乎任何旧的废话。


您的错误位于 JSON.parse 中

在此期间发生错误(但此代码本身没有错误):


gltfLoader.load({

  id: "fsfdsfsdfs",

  metaModelSrc: file1,

  edges: true,

  performance: true,

});

JSON.parse 始终期望接收一个字符串,第一个非空白字符是“{”。


您的 JSON.parse 调用不在您的代码中,而是在gltfLoader.load().


使用 JSON.parse 可能会遇到的麻烦示例:


// Correct call

JSON.parse('{"a":3, "b":"hello"}')

{a: 3, b: "hello"}


// Forget the quotation marks around "a"

JSON.parse(' {a:"<html>skdjfhskdf</html> "}')

Uncaught SyntaxError: Unexpected token a in JSON at position 2


// Use wrong quotation marks (JSON.parse insists on double-quotes for each key. (I have put this error message as two single quotes, to stop stack overflow turning everything that follows into a comment, but it will appear as only one single quote.)

JSON.parse(" {'a':'<html>skdjfhskdf</html> '}")

Uncaught SyntaxError: Unexpected token '' in JSON at position 2


// Empty string input

JSON.parse("")

Uncaught SyntaxError: Unexpected end of JSON input


// Undefined - watch out for this one which is completely baffling the first time it happens! I think it is converting undefined into "undefined" for some reason?

JSON.parse(undefined)

Uncaught SyntaxError: Unexpected token u in JSON at position 0


// Feed in an HTML or XML string, i.e. something starting with an "<"

JSON.parse("<html>Hello</html>")

Uncaught SyntaxError: Unexpected token < in JSON at position 0

诊断步骤

这是您获得的最后一种类型。因此,在运行期间gltfloader.load(),JSON.parse 语句以某种方式接收 XML 或 HTML 格式的数据项。


服务器要么实际以该格式发送数据,要么发送错误消息,例如 404 页面。


您是否有任何方式通过 javascript 读取该页面,就像 via 之外的任何其他格式一样gltfloader?


您是否考虑过像文本文件一样读取它(通过 javascript,而不是通过手动路径并保存),然后看看您会得到什么?


是预期的 JSON 字符串,还是其他什么?我敢打赌是后者。


具体来说,我们可以看到错误消息不是来自Javascript,而是来自您编写或引入的代码

无法从“application/json”加载模型“fsfdsfsdfs”的模型元数据 - utils.loadJSON():无法解析 JSON 响应 - SyntaxError:位置 0 处的 JSON 中出现意外标记 <


将其分解如下。


最后一部分是由 Javascript 发出的:


utils.loadJSON(): Failed to parse JSON response - SyntaxError: Unexpected token < in JSON at position 0

前面的部分是由非Javascript解释器的代码故意发出的。


Failed to load model metadata for model 'fsfdsfsdfs from  'application/json' 

有人编写了“无法加载模型的模型元数据”这句话。这在 Javascript 解释器中不存在。它是在添加的一些代码模块中。有一条错误消息故意打印出来,然后显示底层的 Javascript 错误消息。


问题的核心是 JSON.parse(不是JSON.stringify),它对 XML 或 HTML 字符串而不是 JSON 字符串进行操作。


您确定 Javascript new File 函数实际上正在创建一个文件并将其保存在您的文件系统上吗?

您告诉我们,当您放入"myfile.json"metaModelSrc 时,代码就可以工作。这意味着当代码从计算机的文件系统读取文件(即您可以在文件资源管理器或 Finder 或 Nautilus 等中看到的文件)时,代码可以正常工作。


但是,我认为 javascript“新文件”功能实际上并没有将文件保存到计算机的硬盘上,不是吗?你能看看运行时是否创建了一个吗?


查看完整回答
反对 回复 2023-06-29
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信