# Duplicate Custom Key Perspective

**URL:** <https://forum.inductiveautomation.com/t/duplicate-custom-key-perspective/24661>\
**Category:** Ignition Early Access\
**Created:** [May 4, 2019, 4:13am UTC](https://forum.inductiveautomation.com/t/duplicate-custom-key-perspective/24661 "2019-05-04T04:13:03Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![craigb](https://avatars.discourse-cdn.com/v4/letter/c/9f8e36/32.png) [@craigb](https://forum.inductiveautomation.com/u/craigb)\
**Post date:** [May 4, 2019, 4:13am UTC](https://forum.inductiveautomation.com/t/duplicate-custom-key-perspective/24661/1 "2019-05-04T04:13:03Z")

</div>

I added a custom prop to a drop down called Selected Item. The view in the browser would not open, said not found. The gateway log error was duplicate key. I removed the binding on the custom prop and I was able to open the view in a browser. I checked in designer where else i had used “Selected Item” and I couldn’t find it. I re-enabled the binding and the browser had the same issue. This time the designer locked up, after resetting it now I’m unable to open the view in the designer and the below error pops up, Since Im not able to open the view in designer Im unable to fix the issue or remove the binding for the time being.

I downloaded the latest nightly to see if it fixed the issue and I didn’t, Prior to that I was on the previous Nightly.

```auto
com.inductiveautomation.ignition.common.gson.JsonSyntaxException: java.lang.IllegalStateException: Duplicate key custom.Selected Item (attempted merging values com.inductiveautomation.perspective.common.config.PropertyConfig@2066e89d and com.inductiveautomation.perspective.common.config.PropertyConfig@b123fe)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.Gson.fromJson(Gson.java:927)
	at com.inductiveautomation.ignition.common.gson.Gson.fromJson(Gson.java:865)
	at com.inductiveautomation.perspective.common.config.ViewConfig.fromProjectResource(ViewConfig.java:97)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.deserialize(ViewResourceEditor.java:186)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.deserialize(ViewResourceEditor.java:59)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.loadResource(ResourceEditor.java:56)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.lambda$new$0(ResourceEditor.java:37)
	at java.base/java.util.Optional.ifPresent(Unknown Source)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.<init>(ResourceEditor.java:35)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.<init>(ViewResourceEditor.java:101)
	at com.inductiveautomation.perspective.designer.workspace.ViewWorkspace.newResourceEditor(ViewWorkspace.java:269)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.TabbedResourceWorkspace.open(TabbedResourceWorkspace.java:224)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceNode.open(ResourceNode.java:135)
	at com.inductiveautomation.ignition.designer.navtree.model.AbstractResourceNavTreeNode.onDoubleClick(AbstractResourceNavTreeNode.java:257)
	at com.inductiveautomation.ignition.designer.navtree.NavTreePanel$MouseListener.lambda$mousePressed$0(NavTreePanel.java:655)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Duplicate key custom.Selected Item (attempted merging values com.inductiveautomation.perspective.common.config.PropertyConfig@2066e89d and com.inductiveautomation.perspective.common.config.PropertyConfig@b123fe)
	at java.base/java.util.stream.Collectors.duplicateKeyException(Unknown Source)
	at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Unknown Source)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(Unknown Source)
	at java.base/java.util.Iterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at com.inductiveautomation.perspective.common.config.PropertyConfigCollection$GsonAdapter.deserialize(PropertyConfigCollection.java:81)
	at com.inductiveautomation.perspective.common.config.PropertyConfigCollection$GsonAdapter.deserialize(PropertyConfigCollection.java:73)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	... 44 more

Ignition v(Dev Version)
Java: Azul Systems, Inc. 11.0.2

	

```

---

<div class="post-metadata">

**Author:** ![jpark](https://avatars.discourse-cdn.com/v4/letter/j/a88e57/32.png) [@jpark](https://forum.inductiveautomation.com/u/jpark)\
**Post date:** [May 4, 2019, 3:25pm UTC](https://forum.inductiveautomation.com/t/duplicate-custom-key-perspective/24661/2 "2019-05-04T15:25:44Z")

</div>

Try opening the view.json file from the file system in a text editor.

data/projects/projectname/com.inductiveautomation.perspective/views/your view name

---

<div class="post-metadata">

**Author:** ![craigb](https://avatars.discourse-cdn.com/v4/letter/c/9f8e36/32.png) [@craigb](https://forum.inductiveautomation.com/u/craigb)\
**Post date:** [May 4, 2019, 5:21pm UTC](https://forum.inductiveautomation.com/t/duplicate-custom-key-perspective/24661/3 "2019-05-04T17:21:46Z")

</div>

Thankyou,

Even when I edited the json file to change the name of the custom prop it still would not open. There wasn’t much data on that view anyway so I just re-created it.

I just thought it was strange and possibly a bug that the designer wouldn’t let me open the view to make the changes to fix it.
