SearchReplace - Error during search. com.inductiveautomation.ignition.common.gson.JsonSyntaxException

How would I locate the dodgy View that's causing the find/replace tool to fail? I have 417 Views, so saving them 1-by-1 is a bit unrealistic

20:26:40.619 [ForkJoinPool.commonPool-worker-5] WARN SearchReplace - Error during search.
com.inductiveautomation.ignition.common.gson.JsonSyntaxException: com.inductiveautomation.ignition.common.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 6149 path $
	at com.inductiveautomation.ignition.common.gson.Gson.assertFullConsumption(Gson.java:903)
	at com.inductiveautomation.ignition.common.gson.Gson.fromJson(Gson.java:866)
	at com.inductiveautomation.perspective.common.config.ViewConfig.fromProjectResource(ViewConfig.java:104)
	at com.inductiveautomation.perspective.designer.search.ViewSearchContext.getView(ViewSearchContext.java:66)
	at com.inductiveautomation.perspective.designer.search.ViewSearchCursor.initialize(ViewSearchCursor.java:29)
	at com.inductiveautomation.ignition.designer.findreplace.AbstractDeferredCursor.next(AbstractDeferredCursor.java:21)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.advance(SearchObjectAggregator.java:119)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.next(SearchObjectAggregator.java:107)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.next(SearchObjectAggregator.java:89)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.next(SearchObjectAggregator.java:31)
	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.ignition.designer.findreplace.DefaultSearchExecutor.search(DefaultSearchExecutor.java:40)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 6149 path $
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.syntaxError(JsonReader.java:1568)
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.checkLenient(JsonReader.java:1409)
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.doPeek(JsonReader.java:542)
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.peek(JsonReader.java:425)
	at com.inductiveautomation.ignition.common.gson.Gson.assertFullConsumption(Gson.java:899)
	... 24 common frames omitted
20:26:42.590 [ForkJoinPool.commonPool-worker-5] WARN SearchReplace - Error during search.
com.inductiveautomation.ignition.common.gson.JsonSyntaxException: com.inductiveautomation.ignition.common.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 6149 path $
	at com.inductiveautomation.ignition.common.gson.Gson.assertFullConsumption(Gson.java:903)
	at com.inductiveautomation.ignition.common.gson.Gson.fromJson(Gson.java:866)
	at com.inductiveautomation.perspective.common.config.ViewConfig.fromProjectResource(ViewConfig.java:104)
	at com.inductiveautomation.perspective.designer.search.ViewSearchContext.getView(ViewSearchContext.java:66)
	at com.inductiveautomation.perspective.designer.search.ViewSearchCursor.initialize(ViewSearchCursor.java:29)
	at com.inductiveautomation.ignition.designer.findreplace.AbstractDeferredCursor.next(AbstractDeferredCursor.java:21)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.advance(SearchObjectAggregator.java:119)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.next(SearchObjectAggregator.java:107)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.next(SearchObjectAggregator.java:89)
	at com.inductiveautomation.ignition.designer.findreplace.SearchObjectAggregator.next(SearchObjectAggregator.java:31)
	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.ignition.designer.findreplace.DefaultSearchExecutor.search(DefaultSearchExecutor.java:40)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 6149 path $
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.syntaxError(JsonReader.java:1568)
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.checkLenient(JsonReader.java:1409)
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.doPeek(JsonReader.java:542)
	at com.inductiveautomation.ignition.common.gson.stream.JsonReader.peek(JsonReader.java:425)
	at com.inductiveautomation.ignition.common.gson.Gson.assertFullConsumption(Gson.java:899)
	... 24 common frames omitted

Unfortunately, there's no way I can see to get a better idea (from find & replace) which view it's bombing out on.

You could try a script that looks at each view.json on the filesystem; it looks like the one that's an issue has no line breaks and is totally invalid (a bad script to write an updated view json, maybe?)
Based on: Caused by: com.inductiveautomation.ignition.common.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 6149 path $

Is this problem still relevant 2 years later?

I don't know, are you encountering it?

I don't know (and I suspect two years later neither does Nick) how one of Nick's views got into this state, but it's entirely possible that whatever underlying bug got him into that state is either still present or was fixed in some intermediate version without being explicitly linked to these symptoms.

Yes, For exemple I made a search of a component by selecting only "Windows / Open Window", the Find/Replace will found the component, but if I search for "All Windows" no results was found and a error message appear on the console.
12:01:44.882 [ForkJoinPool.commonPool-worker-15] WARN SearchReplace - Error during search.
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
...

Ignition Version 8.1.32

That's a completely different issue than the one Nick encountered - for one, yours is Vision and Nick's was Perspective. You were both using find & replace, but that's not the relevant aspect here.

You should contact our support department officially, though I'll tell you that one of the first things they'll likely recommend is that you upgrade. 8.1.32 is a year and a half old, and we've fixed a lot of bugs in the meantime.