<!--
  Copyright JS Foundation and other contributors, http://js.foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<script type="text/x-red" data-help-name="json">
    <p>Converts between a JSON string and its JavaScript object representation, in either direction.</p>
    <h3>Inputs</h3>
    <dl class="message-properties">
        <dt>payload<span class="property-type">object | string</span></dt>
        <dd>A JavaScript object or JSON string.</dd>
        <dt>schema<span class="property-type">object</span></dt>
        <dd>An optional JSON Schema object to validate the payload against.
        The property will be deleted before the <code>msg</code> is sent to the next node.</dd>
    </dl>
    <h3>Outputs</h3>
    <dl class="message-properties">
        <dt>payload<span class="property-type">object | string</span></dt>
        <dd>
            <ul>
                <li>If the input is a JSON string it tries to parse it to a JavaScript object.</li>
                <li>If the input is a JavaScript object it creates a JSON string. The string can optionally be well-formatted.</li>
            </ul>
        </dd>
        <dt>schemaError<span class="property-type">array</span></dt>
        <dd>If JSON schema validation fails, the catch node will have a <code>schemaError</code> property
            containing an array of errors.</dd>
    </dl>
    <h3>Details</h3>
    <p>By default, the node operates on <code>msg.payload</code>, but can be configured
       to convert any message property.</p>
    <p>The node can also be configured to ensure a particular encoding instead of toggling
       between the two. This can be used, for example, with the <code>HTTP In</code>
       node to ensure the payload is a parsed object even if an incoming request
       did not set its content-type correctly for the HTTP In node to do the conversion.</p>
    <p>If the node is configured to ensure the property is encoded as a String and it
       receives a String, no further checks will be made of the property. It will
       not check the String is valid JSON nor will it reformat it if the format option
       is selected.</p>
    <p>For more details about JSON Schema you can consult the specification
    <a href="http://json-schema.org/latest/json-schema-validation.html">here</a>.</p>
</script>