# Join JSON Data

**URL:** <https://community.glideapps.com/t/join-json-data/81562>\
**Category:** Ask for Help\
**Created:** [April 26, 2025, 9:58pm UTC](https://community.glideapps.com/t/join-json-data/81562 "2025-04-26T21:58:36Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![BLA\_68](https://avatars.discourse-cdn.com/v4/letter/b/977dab/32.png) [@BLA\_68](https://community.glideapps.com/u/BLA_68)\
**Post date:** [April 26, 2025, 9:58pm UTC](https://community.glideapps.com/t/join-json-data/81562/1 "2025-04-26T21:58:36Z")

</div>

Creating a method to turn a list of items in a table into a google doc using Make. everything is working but the joined list of items is output wrong, creating invalid JSON. Ive used the Json Template column to create a json object for each item. Then I want to join those items into one array. I used the join field, looking through a query, to the JSON Template. But in the webhook the output is wrapped in extra " ". How do I avoid this?

---

<div class="post-metadata">

**Author:** ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)\
**Post date:** [April 26, 2025, 10:13pm UTC](https://community.glideapps.com/t/join-json-data/81562/2 "2025-04-26T22:13:49Z")

</div>

Create a Lookup column instead of a Joined List. Then create a JSON Object column that brings in that lookup column. That will create a proper JSON array in a JSON object.

---

<div class="post-metadata">

**Author:** ![BLA\_68](https://avatars.discourse-cdn.com/v4/letter/b/977dab/32.png) [@BLA\_68](https://community.glideapps.com/u/BLA_68)\
**Post date:** [April 27, 2025, 4:06am UTC](https://community.glideapps.com/t/join-json-data/81562/3 "2025-04-27T04:06:15Z")

</div>

Ok. That was the solution on that. Thank you @Jeff_Hager But now I’m hoping someone can help me with a related problem. In Make, I’m passing these values:

```auto
{{#each body.items}}
## {{title}} - {{topic}}

{{description}}

**Status:** _{{status}}_

---

{{/each}}

```

to iterate though the list of items and populate a google doc template.

In Glide, it shows that the output of the webhook looks like this:

```auto

{"body"
:
{
"items"
:
{
"0"
:
{
"title":"AB 239 (Harabedian)"
"topic":"L.A. County Fire Recovery Task Force "
"status":"Set for hearing Wednesday, April 30, 9 a.m. in Asm. Appropriations, 1021 O Street, Room 1100"
"description":"Requires HCD and the Office of Emergency Services to convene a state-led Los Angeles County disaster housing task force for the purpose of coordinating and streamlining efforts between HCD, FEMA, the Office of Emergency Services, and local governments to rebuild housing in communities impacted by the Eaton and Palisades fires."
}
"1"
:
{
"title":"AB 265 (Caloza)"
"topic":" Small Business Recovery Fund"
"status":"No hearing in Asm Appropriations currently scheduled"
"description":"Creates the Small Business Recovery Fund at the Office of the Small Business Advocate to help small businesses and nonprofits recover from declared disasters. The bill proposes matching grants to impacted small businesses and nonprofits ranging from $2,500 to $100,000, if money for the program is appropriated in the state budget."
}

```

Google doc template has one value: {{items}}. But in the google doc, it just gives the raw output like this

{“title”:“AB 239 (Harabedian)”,“topic”:“L.A. County Fire Recovery Task Force “,“description”:“Requires HCD and the Office of Emergency Services to convene a state-led Los Angeles County disaster housing task force for the purpose of coordinating and streamlining efforts between HCD, FEMA, the Office of Emergency Services, and local governments to rebuild housing in communities impacted by the Eaton and Palisades fires.”,“status”:“Set for hearing Wednesday, April 30, 9 a.m. in Asm. Appropriations, 1021 O Street, Room 1100”}, {“title”:“AB 265 (Caloza)”,“topic”:” Small Business Recovery Fund”,“description”:"Creates the Small Business Recovery Fund at the Office of the Small Business Advocate to help small businesses and nonprofits recover from declared disasters.

What am I doing wrong? Any hints?

---

<div class="post-metadata">

**Author:** ![BLA\_68](https://avatars.discourse-cdn.com/v4/letter/b/977dab/32.png) [@BLA\_68](https://community.glideapps.com/u/BLA_68)\
**Post date:** [April 28, 2025, 6:15pm UTC](https://community.glideapps.com/t/join-json-data/81562/5 "2025-04-28T18:15:47Z")

</div>

I got this to work by using a standard template column to wrap it in [] after creating the join using a lookup as suggested.

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [April 29, 2025, 12:22am UTC](https://community.glideapps.com/t/join-json-data/81562/6 "2025-04-29T00:22:44Z")

</div>

> [@Jeff\_Hager](#):
>
> Then create a JSON Object column that brings in that lookup column. That will create a proper JSON array in a JSON object.

Wouldn’t this work for your case?

---

<div class="post-metadata">

**Author:** ![BLA\_68](https://avatars.discourse-cdn.com/v4/letter/b/977dab/32.png) [@BLA\_68](https://community.glideapps.com/u/BLA_68)\
**Post date:** [April 30, 2025, 8:24pm UTC](https://community.glideapps.com/t/join-json-data/81562/7 "2025-04-30T20:24:41Z")

</div>

I may not have approached it properly, but the Json Object column produced a result like this:

```auto
{
  "items": [
    "{ \"title\": \"AB 236 (Chen)\", \"topic\": \"Digital ....]
}

```

when I fed it my joined list from the lookup.

I need something like this:

```auto
[{ "title": "AB 236 (Chen)", "topic": "Digital financial asset businesses: regulatory fees.", "description": "Description", ... },]

```

---

<div class="post-metadata">

**Author:** ![Nicolas\_Joseph](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/nicolas_joseph/32/76105_2.png) [@Nicolas\_Joseph](https://community.glideapps.com/u/Nicolas_Joseph)\
**Post date:** [April 30, 2025, 9:20pm UTC](https://community.glideapps.com/t/join-json-data/81562/8 "2025-04-30T21:20:18Z")

</div>

Here are the steps I would follow to obtain the expected output @BLA_68 👇

1. Create a `JSON of this row` column (JSON Object) with:
  - title → Title
  - topic → Topic
  - status → Status
  - description → Description  
 ![chrome_SFKvQMOFmH](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/7/f/7fe36fd5551c7dfb0670c8d699a1fd4e0ed7649c.png)

  

1. Create a `JSON of all rows` column (Lookup):
  - Relation column → Items \> JSON of this row  
 ![chrome_pHk6czMu58](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/c/7/c72ad4b9b18f29cdd356cd340dfbe1e531bf26c1.png)  
From a technical perspective, you have created an array Glide will use to format your JSON correctly (cf. Jeff’s answer).

  

1. Create a `JSON with items only` column (JSON Object):
  - items → JSON of all rows  
 ![chrome_MSbmT7zaZw](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/c/2/c201fea1aa89e88e653c5b623aee8859d49e5217.png)  
In my opinion, this should be enough to populate the Google Docs template: you have an object (items) that contains all your records correctly formatted.  
Make will be able to iterate on each element inside items. It means it will:
    - take the “AB 239” record
    - read its properties (title, topic, status and description)
    - push them at their places in your template
    - move to the next record “AB 265” to proceed exactly the same way  
  
  
Though, just to be complete, if you need to wrap “items” INSIDE another property such as “body” (cf. your previous posts), you can move to another option, and this will be step 4. 😛

  

1. Create a `JSON with body and items` column (JSON **Template** ):
  - JSON Template →

```json
{
  "body": {
    "items": $listOfItems

  }
}

```

  - listOfItems → JSON of all rows  
 ![chrome_1Zm54Bj1fn](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/5/4/54b2a0140082d5041ee5f440201706867282b2d8.png)

**Results**  
In **JSON with items only** column:

```json
{
  "items": [
    {
      "title": "AB 239 (Harabedian)",
      "topic": "L.A. County Fire Recovery Task Force ",
      "status": "Set for hearing Wednesday, April 30, 9 a.m. in Asm. Appropriations, 1021 O Street, Room 1100",
      "description": "Requires HCD and the Office of Emergency Services to convene a state-led Los Angeles County disaster housing task force for the purpose of coordinating and streamlining efforts between HCD, FEMA, the Office of Emergency Services, and local governments to rebuild housing in communities impacted by the Eaton and Palisades fires."
    },
    {
      "title": "AB 265 (Caloza)",
      "topic": " Small Business Recovery Fund",
      "status": "No hearing in Asm Appropriations currently scheduled",
      "description": "Creates the Small Business Recovery Fund at the Office of the Small Business Advocate to help small businesses and nonprofits recover from declared disasters. The bill proposes matching grants to impacted small businesses and nonprofits ranging from $2,500 to $100,000, if money for the program is appropriated in the state budget."
    }
  ]
}

```

In **JSON with body and items** column:

```json
{
  "body": {
    "items": [
      {
        "title": "AB 239 (Harabedian)",
        "topic": "L.A. County Fire Recovery Task Force ",
        "status": "Set for hearing Wednesday, April 30, 9 a.m. in Asm. Appropriations, 1021 O Street, Room 1100",
        "description": "Requires HCD and the Office of Emergency Services to convene a state-led Los Angeles County disaster housing task force for the purpose of coordinating and streamlining efforts between HCD, FEMA, the Office of Emergency Services, and local governments to rebuild housing in communities impacted by the Eaton and Palisades fires."
      },
      {
        "title": "AB 265 (Caloza)",
        "topic": " Small Business Recovery Fund",
        "status": "No hearing in Asm Appropriations currently scheduled",
        "description": "Creates the Small Business Recovery Fund at the Office of the Small Business Advocate to help small businesses and nonprofits recover from declared disasters. The bill proposes matching grants to impacted small businesses and nonprofits ranging from $2,500 to $100,000, if money for the program is appropriated in the state budget."
      }
    ]
  }
}

```

  

Hope it helps! 🙂

---

<div class="post-metadata">

**Author:** ![BLA\_68](https://avatars.discourse-cdn.com/v4/letter/b/977dab/32.png) [@BLA\_68](https://community.glideapps.com/u/BLA_68)\
**Post date:** [April 30, 2025, 10:14pm UTC](https://community.glideapps.com/t/join-json-data/81562/9 "2025-04-30T22:14:27Z")

</div>

Very helpful. Let me try again with that approach since it’s probably more bullet proof than what I came up with (though it is working).

---

<div class="post-metadata">

**Author:** ![BLA\_68](https://avatars.discourse-cdn.com/v4/letter/b/977dab/32.png) [@BLA\_68](https://community.glideapps.com/u/BLA_68)\
**Post date:** [May 4, 2025, 4:20pm UTC](https://community.glideapps.com/t/join-json-data/81562/10 "2025-05-04T16:20:59Z")

</div>

So although this worked last week with my setup, when I tested it this week before adding it live, I got a message that the JSON was invalid. 😀

So, I’ve followed the steps suggested by @Nicolas_Joseph and have properly formed JSON like this:

```auto
{
  "items": [
    {
      "title": "SB 31 (McNerney)",
      "topic": "Water quality: recycled water.",
      "status": "Set for hearing Monday, May 12, 10 a.m. in Sen. Appropriations, 1021 O Street, Room 2200"
    },
    {
      "title": "AB 221 (Ramos)",
      "topic": "Tribal Nation Grant Fund.",
      "status": "Set for hearing Wednesday, May 7, 9 a.m. in Asm. Appropriations, 1021 O Street, Room 1100"
    },

```

But in the workflow, when I examine the log, the webhook data sent shows this:

```auto
{
"body"
:
{
"items"
:
{
"items"
:
{
"0"
:
{
"title":"SB 31 (McNerney)"
"topic":"Water quality: recycled water."
"status":"Set for hearing Monday, May 12, 10 a.m. in Sen. Appropriations, 1021 O Street, Room 2200"
}
"1"
:
{
"title":"AB 221 (Ramos)"
"topic":"Tribal Nation Grant Fund."
"status":"Set for hearing Wednesday, May 7, 9 a.m. in Asm. Appropriations, 1021 O Street, Room 1100"
}

```

I don’t understand where the body and extra items are coming from and why it is no longer an array, but I assume it is something I’m doing wrong in my Make scenario?

This is what the output looks like in the webhook module:

 ![Screenshot 2025-05-04 at 9.13.21 AM](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/5/f/5ffcdff9681fee8c506bda09daf1a3dd43ae3706.png)

the Json parser output looks like this:

 ![Screenshot 2025-05-04 at 9.18.08 AM](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/a/d/adc57cc8cded9db98e91d437b692292929de5038.png)

Then through the Array Aggregator set up like this:

 ![Screenshot 2025-05-04 at 9.18.57 AM](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/0/4/044716a7e51a2bd37ef365fdf68155c01dcf6a6b.png)  
the file that is emailed works…but if delivers just the first item in the array.

---

<div class="post-metadata">

**Author:** ![Nicolas\_Joseph](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/nicolas_joseph/32/76105_2.png) [@Nicolas\_Joseph](https://community.glideapps.com/u/Nicolas_Joseph)\
**Post date:** [May 4, 2025, 8:23pm UTC](https://community.glideapps.com/t/join-json-data/81562/11 "2025-05-04T20:23:19Z")

</div>

Without being a Make specialist (or Glide for that matter 😅), I would have used an `Iterator` instead of an `Array aggregator` before choosing the `Insert a Paragraph to a Document` in `Google Docs` module.

  

Here is my **Google Docs output** :

 ![Google Docs output](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/9/8/98a3204bebd6e9c9213f6d9b908832c5571daadd.png "Google Docs output")

  

And the previous steps:  
**In Glide**

- A `Single Value` column to get the full JSON (in Users table)  
 ![Single Value](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/a/9/a9ce8664e7f14139de6234a49d28eeb7f6d0da79.png "Single Value")
- A button with `Trigger webhook` action  
 ![Webhook from Button](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/b/f/bfbae74e71999b6b3ee08f748f9a3caeb6b53cb6.png "Webhook from Button")

  

**In Make**

 ![Make Scenario](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/5/9/5954c565ba823f9bf59b5644fa7ba34e8e3d9327.png "Make Scenario")

- Webhooks Output (just like yours 🥳)  

- Iterator  

- Google Docs with _Insert a Paragraph to a Document → By appending to the body of document_  

  

I’ll admit the truth: I tried to format your document with bold and title style (using Markdown first then HTML)… and it’s an epic fail at this point. Make community as some posts about this topic (in this particular case), and a solution using Google Docs Api and/or App Script is given (cf. [Append formatted text to Google Doc - How To - Make Community](https://community.make.com/t/append-formatted-text-to-google-doc/31293)).  
At this point, I have now reached my level of incompetence 😊

Hope it helps for the Glide part though 👍

---

<div class="post-metadata">

**Author:** ![BLA\_68](https://avatars.discourse-cdn.com/v4/letter/b/977dab/32.png) [@BLA\_68](https://community.glideapps.com/u/BLA_68)\
**Post date:** [May 4, 2025, 10:21pm UTC](https://community.glideapps.com/t/join-json-data/81562/12 "2025-05-04T22:21:58Z")

</div>

Hi thank you. I finally made the bold decision to start from scratch in MAKE instead of trying to use the existing scenario that was clearly not agreeing with me. Feeding the new scenario the JSON formatted using the instructions in this thread worked! I was able to get the html formatting to work by using a create google doc module (rather than a google doc template) and wrapping the html formatted output of the aggregator in a body tag. Thank you everyone for your help!
