# Module access to Ignition's internal 'json to perspective object' code

**URL:** <https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363>\
**Category:** Ignition\
**Tags:** sdk, scripting, perspective\
**Created:** [November 21, 2025, 3:45pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363 "2025-11-21T15:45:49Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [November 21, 2025, 3:45pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/1 "2025-11-21T15:45:49Z")

</div>

What are the methods to look for for hooking into ignition’s internal ‘take in json/object description, convert into perspective object or output list of errors’ code that e.g. lives in the designer?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 21, 2025, 4:23pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/2 "2025-11-21T16:23:21Z")

</div>

This question isn't formulated well enough to make sense to me yet.

What's the ultimate thing you're trying to do?  
I _think_ you might be asking for the `PropertyTree` API?

> **[PropertyTree](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.50/com/inductiveautomation/perspective/gateway/property/PropertyTree.html)**
>
> declaration: package: com.inductiveautomation.perspective.gateway.property, class: PropertyTree

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [November 21, 2025, 4:28pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/3 "2025-11-21T16:28:01Z")

</div>

So right now, if i e.g. copy paste in a perspective json, or i import a project zip containing a view json, somehow that gets translated in the designer into a bunch of ‘this is a valid perspective object’ or ‘this object isn’t valid because props x, y, and z are missing and prop A has data type B instead of C-E’ errors. i want to hook into that translation pipeline

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 21, 2025, 4:32pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/4 "2025-11-21T16:32:42Z")

</div>

> [@Leor\_Fishman](#):
>
> to hook into

What does this mean? Each component declares a schema--the designer is just evaluating that, IIUC.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 21, 2025, 4:35pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/5 "2025-11-21T16:35:24Z")

</div>

`com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentPropsDocumentModel`

which extends `com.inductiveautomation.ignition.client.jsonedit.DocumentModel`

which exposes `DocumentModel.getValidationResults`

Constructing a `ComponentPropsDocumentModel` is going to be tricky while you're not literally the Perspective module, because some of the constructor arguments are going to be hard to realize.

Here's a use-site example:

```java
                JsonSchema schema = switch (scope) {
                    case props -> selection.getPropsSchema();
                    case meta -> PerspectiveModule.META_SCHEMA;
                    case position -> selection.getPositionSchema(editor.get().getDeepSelection());
                    default -> null;
                };
                setModel(new ComponentPropsDocumentModel(editor.get(), selection, scope, schema));

```

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [November 21, 2025, 4:35pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/6 "2025-11-21T16:35:55Z")

</div>

Oh, great, where are those component by component schemas declared? is it just each component has a schema property?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 21, 2025, 4:37pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/7 "2025-11-21T16:37:30Z")

</div>

Exactly that:

> **[ComponentDescriptor](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.50/com/inductiveautomation/perspective/common/api/ComponentDescriptor.html#schema())**
>
> declaration: package: com.inductiveautomation.perspective.common.api, interface: ComponentDescriptor

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 21, 2025, 4:45pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/8 "2025-11-21T16:45:07Z")

</div>

That component descriptor is what the gateway hook registers with Perspective to make the component available in general. The Perspective example project has a very bare skeleton for this.

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [November 21, 2025, 4:50pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/9 "2025-11-21T16:50:46Z")

</div>

terrific. any chance the defaults the designer fills in are also there?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 21, 2025, 4:51pm UTC](https://forum.inductiveautomation.com/t/module-access-to-ignitions-internal-json-to-perspective-object-code/112363/10 "2025-11-21T16:51:40Z")

</div>

That would be part of the component's schema, yes.
