无法理解此JSON模式

时间:2019-04-02 14:33:29

标签: 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应该返回一个二维码。

2 个答案:

答案 0 :(得分:0)

老实说,我没有花时间学习 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”)也能正常工作。

答案 1 :(得分:0)

这是一个返回有效二维码的最小且无用的请求

{
    "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
    }
}