#javascript #json
#javascript #json
Вопрос:
metaModelSrc: «myfile.json» — отлично работает, но мне нужна переменная, вместо того, чтобы получать API — объект json. это означает, что вы можете сделать metaData.name и он это покажет
- когда вы копируете вставляете stringify в файл json и указываете путь к файлу, он работает. когда вы загружаете большой двоичный объект и указываете его как файл пути.json он работает — мне нужно загрузить его из кода, не загружая большой двоичный объект
Моя ошибка: 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
Я пытался выполнить stringify, и это не сработало, я попытался превратить его в файл, и это не сработало.
- Я загрузил его из большого двоичного объекта и дал ему путь metaModelSrc: «…./myfile.json», и это сработало. но мне нужно загрузить это из переменной, а не из пути, и мне не интересно загружать большой двоичный объект, мне нужно работать с данными, которые я получаю из 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,
});
Комментарии:
1. что ты снова пытаешься сделать?
2. Эта ошибка, скорее всего, означает
metaData
, что это XML или HTML и не может быть проанализирована JSON API.3. metaModelSrc = «myfile.json» ! он отлично работает! но мне нужен myfile. json как переменная вместо пути типа «,,,,/myfile.json»
4. покажите нам метаданные, они начинаются с
<
, так что это недопустимый json5. но это не так, все начинается с
<
, может быть, вы получаете какую-то синтаксическую ошибку из api? проверьте в инструментах разработчика браузера, что именно вы получаете в ответ от api
Ответ №1:
const urlTestJsonModel = URL.createObjectURL(file);
metaModelSrc: urlTestJsonModel
Решена моя проблема 🙂 Спасибо всем за вашу помощь
Ответ №2:
Сообщение об ошибке `Неожиданный токен < в JSON в позиции 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, а из кода, написанного вашим или введенного вами
Не удалось загрузить метаданные модели для модели ‘fsfdsfsdfs из ‘application / json’ — utils.loadJSON(): не удалось проанализировать ответ JSON — Ошибка синтаксиса: неожиданный токен < в JSON в позиции 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.
Суть проблемы заключается в файле JSON.parse (не JSON.stringify), который работает со строкой XML или HTML, а не со строкой JSON.
Вы уверены, что функция Javascript new File действительно создает файл и сохраняет его в вашей файловой системе?
Вы говорите нам, что когда вы вводите "myfile.json"
в metaModelSrc, код работает. Это означает, что код работает правильно, когда он считывает файл из файловой системы компьютера (т. Е. Файл, Который вы можете увидеть в проводнике, Finder или Nautilus и т. Д.).
Тем не менее, я думаю, что функция javascript «новый файл» на самом деле не сохраняет файл на жесткий диск вашего компьютера, не так ли? Можете ли вы посмотреть, создается ли он при его запуске?
Комментарии:
1. JSON.parse(metaDatastringify) — я возвращаю свой объект json, но metaModelSrc завершится сбоем объекта, и это метаданные, которые я получаю от api в конце
2. Не та строка. Проблема в последней строке вашего кода
3. это тот же файл json
4. Да, я уверен. потому что, когда я загружаю файл и использую его в своем path, он работает
5.
const urlTestJsonModel = URL.createObjectURL(file);
metaModelSrc: urlTestJsonModel решил мою проблему 🙂 Спасибо всем за вашу помощь