簡體   English   中英

Javascript - 從變量加載 json

[英]Javascript - Load json from variable

metaModelSrc:“myfile.json” - 運行良好,但我需要一個變量而不是 Api 接收 - 一個 json 對象。 theat 意味着你可以做 metaData.name 並且它會顯示它

  • 當您將 stringify 復制粘貼到 json 文件並提供它正在工作的路徑文件時。 當您下載 blob 並將其作為路徑 file.json 時,它確實有效 - 我需要從代碼中加載它而不下載 blob

我的錯誤:metaModelSrc

Failed 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 api
const 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,
    });
const urlTestJsonModel = URL.createObjectURL(file);

metaModelSrc: urlTestJsonModel 解決了我的問題 :) 謝謝大家的幫助

錯誤消息“Unexpected token < in JSON at position 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 頁面。

除了通過gltfloader之外,您是否有任何方式通過 javascript 閱讀該頁面?

你有沒有考慮過把它當作一個文本文件來閱讀(通過 javascript,而不是通過手動路徑並保存它),看看你得到了什么?

它是預期的 JSON 字符串還是其他內容? 我敢打賭是后者。

具體我們可以看到錯誤信息不是來自Javascript,而是來自您編寫的或由您引入的代碼

無法從“應用程序/json”加載模型“fsfdsfsdfs”的模型元數據 - utils.loadJSON(): 解析 JSON 響應失敗 - SyntaxError: Unexpected token < in JSON at position 0

分解如下。

最后一部分由 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 錯誤消息。

問題的核心是對 XML 或 HTML 字符串而不是 JSON 字符串進行操作的 JSON.parse(而不是JSON.stringify)。

您確定 Javascript new File 函數實際上是在制作文件並將其保存在您的文件系統中嗎?

您告訴我們,當您將"myfile.json"放入 metaModelSrc 時,代碼會起作用。 這意味着代碼在從計算機的文件系統(即您可以在文件資源管理器、Finder 或 Nautilus 等中看到的文件)讀取文件時可以正常工作。

但是,我認為javascript“新建文件”功能實際上並沒有將文件保存到您的計算機硬盤上,是嗎? 運行的時候能不能看看有沒有創建?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM