Я загрузил json у пользователя, и теперь я пытаюсь сравнить этот json с схемой с помощью jsonschema validator. Я получаю сообщение об ошибке: ValidationError: не относится к типу u'object '
Ошибка проверки u'type' в схеме
Это мой код:
from __future__ import unicode_literalsfrom django.shortcuts import render, redirectimport jsonschema
import json
import os
from django.conf import settings#File to store all the parsersdef jsonVsSchemaParser(project, file):
baseProjectURL = 'src\media\json\schema'
projectSchema = project.lower()+'.schema'
projectPath = os.path.join(baseProjectURL,projectSchema)
filePath = os.path.join(settings.BASE_DIR,'src\media\json', file)
actProjectPath = os.path.join(settings.BASE_DIR,projectPath)
print filePath, actProjectPath
schemaResponse = open(actProjectPath)
schema = json.load(schemaResponse)
response = open(filePath)
jsonFile = json.load(response)
jsonschema.validate(jsonFile, schema)
Я пытаюсь сделать что-то похожее на этот вопрос , за исключением использования URL-адреса. Я использую свой путь к файлу.
Также я использую python 2.7 и Django 1.11, если это вообще полезно.
Также я уверен, что у меня нет проблем с моими файловыми путями, потому что я их распечатал и вывел что я ожидал. Я также знаю, что моя схема и json могут быть прочитаны jsonschema, так как я использовал ее и в командной строке.
EDIT: эта ошибка проверки показалась случайной. фактическая ошибка проверки, которую я постоянно получаю, это "-1 не относится к типу u'string". Досадно, что это должно быть так. Неправильно, что sessionid не является строкой, но я хочу, чтобы это обрабатывалось jsonschema, но я не хочу, чтобы мои ошибки проверки были указаны в этом формате: . То, что я хочу сделать, - собрать все ошибки проверки в массиве, а затем отправить его пользователю на следующей странице.
Я только что положил try-catch вокруг моего метода проверки. Вот как это выглядит:
EDIT: это решение работает только в том случае, если у вас есть одна ошибка, потому что после того, как выдается ошибка проверки, она выходит из метода проверки. Чтобы представить каждую ошибку, вам нужно использовать ленивую проверку. Вот как он выглядит в моем коде, если вам нужен другой пример:
✓ инструкция try-except-else-finally - отличный способ поймать и обработать исключения (ошибки времени выполнения) в Python.
✓ Так что, если вы хотите поймать и сохраните Исключения в массиве, тогда отличным решением для вас будет использовать оператор try-except. Таким образом, вы можете ловить и хранить в любой структуре данных, такой как списки и т. Д., И ваша программа продолжит выполнение, она не будет завершена.
✓ Ниже приведен модифицированный код, в котором я использовал цикл for который улавливает ошибку 5 раз и сохраняет в списке.
✓ Наконец, вы можете посмотреть пример ниже кода, в котором я сохранил ZeroDivisionError и это связанное строковое сообщение в двух разных списках, итерации по циклу for 5 раз.
"Выход: