For JSON loaders - like a Figma Design - similarity does not work, and ends up with the wrong output. 

### System Info

Tried on Colab. 

Version: [v0.0.209](https://github.com/hwchase17/langchain/releases/tag/v0.0.209)

Platform: Google Colab

Python: 3.10

### Who can help?

@hwchase17

### Information

- [x] The official example notebooks/scripts
- [x] My own modified scripts

### Related Components

- [ ] LLMs/Chat Models
- [ ] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [X] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [X] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

1. Take a Figma file and use Langchain's Figma plugin to get the JSON from API. 
2. Use the index = VectorstoreIndexCreator().from_loaders([figma_loader]) to get the index. 
3. And then create doc retriever using figma_doc_retriever = index.vectorstore.as_retriever()

When we query ChatGPT/LLMs, the way code works is that it breaks the original document into parts, and finds similarity. Great for unstructured documents, but bad for JSON - breaks the structure and does not carry the right content either. So, for example, this function 

relevant_nodes = figma_doc_retriever.get_relevant_documents("Slack Integration")

which calculates similarity to get the nearest nodes, gave me this output: 

[Document(page_content='name: Dark Mode\nlastModified: 2023-06-19T07:26:34Z\nthumbnailUrl: \nversion: 3676773001\nrole: owner\neditorType: figma\nlinkAccess: view\nnodes: \n10:138: \ndocument: \nid: 10:138\nname: Slack Integration\ntype: FRAME\nscrollBehavior: SCROLLS\nblendMode: PASS_THROUGH\nchildren: \nid: 10:139\nname: div.sc-dwFxSa\ntype: FRAME\nscrollBehavior: SCROLLS\nblendMode: PASS_THROUGH\nchildren: \nid: 10:140\nname: Main\ntype: FRAME\nscrollBehavior: SCROLLS\nblendMode: PASS_THROUGH\nchildren: \nid: 10:141\nname: div.sc-iAVVkm\ntype: FRAME\nscrollBehavior: SCROLLS\nblendMode: PASS_THROUGH\nchildren: \nid: 10:142\nname: div.sc-bcXHqe\ntype: FRAME\nscrollBehavior: SCROLLS\nblendMode: PASS_THROUGH', metadata={'source': ''}),

 Document(page_content='id: 10:178\nname: Send project updates to a Slack channel\ntype: TEXT\nscrollBehavior: SCROLLS\nblendMode: PASS_THROUGH\nabsoluteBoundingBox: \nx: -3084.0\ny: 3199.0\nwidth: 250.0\nheight: 16.0\n\nabsoluteRenderBounds: \nx: -3083.335205078125\ny: 3202.1669921875\nwidth: 247.89453125\nheight: 12.4921875\n\nconstraints: \nvertical: TOP\nhorizontal: LEFT\n\nlayoutAlign: INHERIT\nlayoutGrow: 0.0\nfills: \nblendMode: NORMAL\ntype: SOLID\ncolor: \nr: 0.9960784316062927\ng: 1.0\nb: 0.9960784316062927\na: 1.0\n\n\nstrokes: \nstrokeWeight: 1.0\nstrokeAlign: OUTSIDE\neffects: \ncharacters: Send project updates to a Slack channel\nstyle: \nfontFamily: Inter\nfontPostScriptName: None\nfontWeight: 500\ntextAutoResize: WIDTH_AND_HEIGHT\nfontSize: 13.0\ntextAlignHorizontal: LEFT\ntextAlignVertical: CENTER\nletterSpacing: 0.0\nlineHeightPx: 15.732954025268555\nlineHeightPercent: 100.0\nlineHeightUnit: INTRINSIC_%\n\nlayoutVersion: 3\ncharacterStyleOverrides: \nstyleOverrideTable: \n\nlineTypes: NONE\nlineIndentations: 0', metadata={'source': ''}),

(2 more such nodes)


### Expected behavior

For JSON, it should start from the innermost json, and then work the way backwards (especially for Figma) to enable LLM with more precise understanding of the structure and also get the output as desired.