Форум сайта python.su
Здравствуйте!
Есть json-schema, есть json данные
все отлично валидирую с помощью jsonschema.
У каждого элемента схемы есть description. Возможно ли каким то образом(не знаю как правильно сказать) объединить json данные с определенными элементами схемы(в частности description)? Может не совсем верно выражаю мысль - необходимо что бы на выходе json-данные приобрели элемент description в соответствии со схемой.
На выходе:
[code json]
[
{"methodName":{"value" : "test1", "description": "Название метода"} },
{"methodName":{"value" : "test2", "description": "Название метода"} },
{"methodName":{"value" : "test3", "description": "Название метода"} },
]
[/code]
[code json]
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array",
"items": {
"type": "object",
"properties": {
"methodName": {"description": "Название метода", "type": "string"},
}
}
}
[/code]
[code json]
[
{"methodName":"test1" },
{"methodName":"test2" },
{"methodName":"test3" },
]
[/code]
Офлайн
> необходимо что бы на выходе json-данные приобрели элемент description в соответствии со схемой.
Конечно description можно вытащить из схемы… но только зачем? Схема нужна только для валидации данных, а description это обычный комментарий, 90% что данные не должны его содержать.
Офлайн
Каким образом его можно вытащить?
Офлайн
>>> import simplejson >>> s = """{"$schema": "http://json-schema.org/draft-04/schema#", ... "type": "array", ... "items": {"type": "object", ... "properties": {"methodName": {"description": "name", "type": "string"}}}}""" >>> s = simplejson.loads(s) >>> s["items"]["properties"]["methodName"]["description"] 'name'
Офлайн
RodegastНу эт не совсем то чего хотелось бы…
Офлайн
Ну ладно… вот тебе рекурсивное решение
import simplejson s = """{"$schema": "http://json-schema.org/draft-04/schema#", "type": "array","items": {"type": "object", "properties": {"methodName": {"description": "name", "type": "string"}}}, "items2": {"type": "object","properties": {"methodName0": {"description": "name1", "type": "string"}}}, "items6": {"type": "object","properties": {"methodName3": {"description": "name6", "type": "object", "items": {"type": "object","properties": {"methodName0": {"description": "name100", "type": "string"}}}}}} }""" def getDescription(json, attr): akum = [] for k in ( k for k in json if isinstance(json[k], dict) ): if attr in json[k]: akum.append((k, json[k][attr])) akum += getDescription(json[k], attr) return akum print getDescription(simplejson.loads(s), "description") >>> [('methodName0', 'name1'), ('methodName', 'name'), ('methodName3', 'name6'), ('methodName0', 'name100')]
Отредактировано Rodegast (Фев. 12, 2018 14:58:23)
Офлайн