2

I want to be able to define functions with parameters and return type for my JavaScript object specification. I am hoping to be able to do this using JSONSchema. But, I can't seem to figure out how to do it.

I am trying to do something like the following:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/product.schema.json",
  "title": "Product",
  "description": "A JavaScript object that gets a product from Acme's catalog",
  "type": "object",
  "properties": {
    "getProduct": {
      "description": "returns a product object when a product id is provided as a parameter",
      "type": "function",
      "parameters": ["id": uuid],
      "returnType": object
    }
  },
}

Does anybody know of a project or tool that will allow me to do this? Triple thanks in advance.

3
  • 1
    How would you store a function in a json object? How would you serialize and deserialize it? Json does not provide support for functions Commented Oct 7, 2021 at 6:07
  • I am looking to specify the object, not define it, very much as one can specify an API in OpenApi and then use the specification to implement the particular API. Commented Oct 7, 2021 at 15:18
  • also asked on github.com/json-schema-org/community/discussions/… Commented Oct 9, 2021 at 1:28

2 Answers 2

2

JSON Schema does not have any capacity to describe functions, due to the fact that JSON cannot express functions. JSON Schema is defined over the data model expressible in JSON.

current versions of the JSON Schema specification are quite extensible with the addition of vocabularies. although it would not be consistently interoperable, a vocabulary to describe functions might be a possibility.

Sign up to request clarification or add additional context in comments.

Comments

1

You can always define functions as properties of JSON objects by key value syntax. like this:

    const Product = {
      id: 50,
      getProduct: function(id){
        return 'product '+id;
      }
    }

But if you want to serialize this JSON to exchange it in some way. you have to override JSON.stringfy replacer function like this

    JSON.stringify(Product, function(key, value){
      if(typeof value === 'function')
        return value.toString();
      else return value;
    });

And if you like to add comments to your JSON, you can add some key/value like _comment:"Type your comment here" to your object.

1 Comment

I am looking to specify the object rather than define it. Still thanks for the suggestion.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.