Не могу понять эту схему JSON из Swish QR Code API

#json #jsonschema

#json #jsonschema

Вопрос:

Я пытаюсь использовать API, но документация действительно плохая. Я получил эту схему JSON, но я ее не понимаю. Что я должен включить в запрос?

url:https://mpc.getswish.net/qrg-swish/api/v1/prefilled

Я пробовал это, но это не работает:

 {
    "payee":{
        "editable":{
            "editable":"false"
            },
        "swishString":{
            "value":"0721876507"
        }
    },
    "size":600,
    "border":20,
    "transparent":false,
    "format":"png"
}
  

Вот схема JSON

 {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Swish pre-filled qr code generator",
    "description": "REST interface to get a QR code that the Swish app will interpret as a pre filled code",
    "definitions": {
        "editable": {
            "description ": "Controls if user can modify this value in Swish app or not",
            "type": "object",
            "properties": {
                "editable": {
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "swishString": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "string",
                    "maxLength": 70
                }
            },
            "required": [
                "value"
            ]
        },
        "swishNumber": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "number"
                }
            },
            "required": [
                "value"
            ]
        }
    },
    "type": "object",
    "properties": {
        "format": {
            "enum": [
                "jpg",
                "png",
                "svg"
            ]
        },
        "payee": {
            "description": "Payment receiver",
            "allOf": [
                {
                    "$ref": "#/definitions/editable"
                },
                {
                    "$ref": "#/definitions/swishString"
                }
            ]
        },
        "amount": {
            "description": "Payment amount",
            "allOf": [
                {
                    "$ref": "#/definitions/editable"
                },
                {
                    "$ref": "#/definitions/swishNumber"
                }
            ]
        },
        "message": {
            "description": "Message for payment",
            "allOf": [
                {
                    "$ref": "#/definitions/editable"
                },
                {
                    "$ref": "#/definitions/swishString"
                }
            ]
        },
        "size": {
            "description": "Size of the QR code. The code is a square, so width and height are the same. Not required is the format is svg",
            "value": "number",
            "minimum": 300
        },
        "border": {
            "description": "Width of the border.",
            "type": "number"
        },
        "transparent": {
            "description": "Select background color to be transparent. Do not work with jpg format.",
            "type": "boolean"
        }
    },
    "required": [
        "format"
    ],
    "anyOf": [
        {
            "required": [
                "payee"
            ]
        },
        {
            "required": [
                "amount"
            ]
        },
        {
            "required": [
                "message"
            ]
        }
    ],
    "additionalProperties": false,
    "maxProperties": 5
}
  

API должен возвращать QR-код.

Комментарии:

1. Как вы извлекаете JSON? Пожалуйста, укажите весь соответствующий код

2. Я извлекаю ее, как в первом примере

3. Первым примером является JSON, а не код для извлечения JSON

4. Я использую postman для вызова API.

5. Возможно, вы захотите прочитать json-schema.org/learn/getting-started-step-by-step.html и взгляните на json-schema.org/understanding-json-schema

Ответ №1:

Честно говоря, я не потратил время на изучение схемы JSON, но ваш пример, вероятно, должен выглядеть примерно так:

 {
  "payee": {
    "value": "0721876507",
    "editable": false
  },
  "size": 600,
  "border": 20,
  "transparent": false,
  "format": "png"
}
  

Есть другие параметры, которые вы можете использовать:

 {
  "payee": {
    "value": "1239006032",
    "editable": false
  },
  "message": {
    "value": "LIV",
    "editable": true
  },
  "amount": {
    "value": 100,
    "editable": true
  },
  "format": "png", 
  "size": 300,
  "border": 0,
  "transparent": true
}
  

Честно говоря, я думаю, что разработчики Swish API пытаются выглядеть умными, усложняя вещи. Они, конечно, должны были предоставить пример данных JSON вместо того, чтобы заставлять потребителей понимать их схему JSON. Кроме того, я считаю, что их опубликованная схема неверна. Второй приведенный мной пример работает, даже если он не проверяется в соответствии со схемой JSON («Количество свойств объекта 7 превышает максимальное количество 5»).

Ответ №2:

Вот минимальный и довольно бесполезный запрос, который возвращает действительный QR-код

 {
    "format": "png",
    "size": 300
}
  

И вот более полезный пример, который работает

 {
    "format": "png",
    "size": 300,
    "transparent": false,
    "amount": {
        "value": 999.99,
        "editable": true
    },
    "payee": {
        "value": "0701000000",
        "editable": false
    },
    "message": {
        "value": "Hello",
        "editable": false
    }
}