JSON, Level: Advanced

November 2025 FM Training Livestream

Here are links to articles and resources related to today’s FM Training Livestream presentation: Best of FileMaker Hacks Tips, Tricks and Traps, part 3.

YouTube link

Demo Files

FMH Articles

Other Resources

ExecuteSQL, JSON, Level: Any, SQL, Virtual List

October 2025 Full Access Resource Page

Here are links to articles and resources related to presentations/discussions I will be participating in at the [Full Access] un-conference Oct 20-23, 2025.

JSON Demo Files

JSON Articles

JSONQuery

Virtual List Demo Files

Virtual List Articles

SQL Articles

JSON, Level: Advanced, Version: FM 19.6 or later, Virtual List

Virtual List Even More Simplified

Demo file: virtual-list-even-more-simplified.zip  [expects, but does not require, FM 22 or later]

Note 1: The example in today’s article/demo is intentionally very basic.
Note 2: The demo is self-populating to keep the data current, so the values you see in the screen shots may not exactly match those you encounter in the demo.

As long time readers may recall, between 2011 and 2019 this blog featured numerous articles touching on various aspects of the virtual list technique — or, more properly, series of techniques. The following year, in 2020, I decided to distill the core bits into a basic “beginner’s guide” with accompanying demo file, and I called it Virtual List Simplified. And if you’re still using FM 21 or earlier, and are looking for an introduction to virtual list, I highly recommend that article.

However, with the release a few months ago of FM 22 (a.k.a. FileMaker 2025), the landscape dramatically changed thanks to a re-written JSON engine that is significantly more powerful (i.e., faster) than before. Why should that matter? Because JSON is typically where virtual list gets its data from, and thanks to this awesome performance boost, it’s time to recycle and update the 2020 article and accompanying demo file to take advantage of it. And good news: it’s now less complicated and easier to understand.

At the risk of stating the obvious, there are many, many ways to skin the virtual list cat, and the purpose of today’s article is not to say “this is the best way”, or imply that other approaches are flawed, but simply to propose one particular approach you might take — especially if you are either: a) new to virtual list, or b) already using virtual list, but aren’t completely happy with your current implementation.

At any rate, my aim today is to gather useful insights from earlier articles into a single document (with a couple new ideas thrown in), and some of what follows has been recycled from those earlier articles.

Spoiler alert: two-dimensional JSON arrays are now viable and performant as back-ends for virtual list. Prior to FM 22 this was not the case… things would appear to be fine when the 2D array was relatively small, but would slow down dramatically with larger 2D arrays. For details see Virtual List with a 2D JSON Array in “FileMaker Pro 22: Initial Impressions”.

Continue reading “Virtual List Even More Simplified”

JSON, Level: Advanced

September 2025 FM Training Livestream

Here are links to articles and resources related to today’s FM Training Livestream presentation.

YouTube link

Demo Files

Articles

Addendum

During my presentation, when I showed this example…

…I should have added:

Surrounding the “Blue” with a pair of ¶s is good-faith attempt to avoid false positives in case the list contains “Bluegrass”, “Blueberry, “Bluebird”, “Abluent”, etc.

The demo file has been updated to reflect this.

JSON, Level: Advanced, Version: FM 21 or later

Kentuckiana FM Developers JSON Presentation

Here are links to articles and resources related to today’s KYFMP presentation on JSON custom functions and JSONQuery.

YouTube links

Presentation and Demo Files

JSON and JSON Custom Functions

Other JSON-Related Articles

JSONQuery

 

JSON, Level: Any, Version: FM 22 or later, Virtual List

FileMaker Pro 22: Initial Impressions

Demo Files

Minimum version to open the file shown in parentheses.

Introduction

It’s been a couple weeks since the release of FileMaker Pro 22 (a.k.a. 2025), and now that the dust is beginning to settle and I’ve had some time to explore and build some demos, my initial reactions are…

  1. Wow, this is an amazing, game changing release.
  2. Ouch, they just “broke” a bunch of my blog articles — in the sense that behaviors and issues described therein have changed in FM 22.

What this article is not: a general overview. If you’re looking for a general overview Fabrice Nordmann (FileMaker 2025! Explore the New Features) and Wim Decorte (FileMaker 2025 Executive Summary) have written some good ones.

What this article is: a look at some of the features and fixes I’m interested in, including the new GetRecordIDsFromFoundSet (a.k.a. GRIFFS) function, and with particular focus on JSON performance improvements. Also I want to mention a potential problem if you’re on the Windows platform, and we might as well get that out of the way first. Continue reading “FileMaker Pro 22: Initial Impressions”

JSON, Level: Advanced, Version: FM 21 or later

JSON Optimization in FM 21

Introduction

If you work with large JSON structures in FileMaker, you may be aware that the current shipping version of the product (FileMaker Pro 21, a.k.a. FileMaker Pro 2024) has a single-element JSON cache, which is reset whenever JSONSetElement or JSONGetElement is called, and that you can boost performance by taking this into account.

Six months ago Josh Halpern was kind enough draw my attention to this in a comment on one of my articles, and added…

“If you’re interested, I wrote a couple more points about how the JSON cache behaves here: https://the.fmsoup.org/t/performance-core-principles-10-scripting/1867/25?u=jwilling. But the gist is… only touch one json at a time.

[The above is required reading as far as I’m concerned, and has changed the way I work with JSON.]

More recently I was discussing JSON caching with Steve Senft-Herrera, and he shared a couple additional optimization ideas that had not occurred to me, and that I am definitely adding to my tool kit. (Thank you Steve.)

At any rate, today we’re going to take a look at applying all three of these ideas to speed up processing of large JSON structures within a While statement, and you can follow along in today’s demo file if you are so inclined.

Demo file: fm-21-json-optimization.zip  (requires FM 21 or later)
Continue reading “JSON Optimization in FM 21”

JSON, Level: Advanced

January 2025 FM Training Livestream

Here are links to articles, custom functions, etc., related to my Wednesday, January 15th FM Training Livestream presentation on JSON custom functions.

YouTube link

Demo Files

JSON and JSON Custom Functions

Other JSON-Related Articles

JSONQuery

 

JSON, Level: Advanced, Version: FM 19.6 or later

JSONQuery Odds and Ends

This is a quick “odds and ends” post to share the current iteration of my JSONQuery sandbox file. Some of the examples are new; some are from presentations I gave earlier this year. Most of them illustrate one or more things you can do with this amazing custom function (a few of the examples don’t deal with JQ directly, but play a supporting role). The aim is to convey a tiny measure of the depth and breadth of what you can accomplish with JSONQuery.

Resources:

The Sandbox file requires FM 19.6 or later (but a few of the examples use features introduced in FM 21).

A bit of info in case this is the first time you’ve heard of JSONQuery. It is a custom function which operates on JSON, created and maintained by Steve Senft-Herrera.

Typically you’re going to point it at an array of objects…

…or an array of arrays…

…and it will return child elements matching your query parameters. Continue reading “JSONQuery Odds and Ends”

JSON, Level: Advanced, Version: FM 18 or later

JSONQuery v2 Conversation with Steve Senft-Herrera, part 2

Note 1: This conversation primarily focuses on new features and improvements in JQ v2. For a more general introduction to JSONQuery see the “Resources” section at the beginning of part 1.

Note 2: JSONQuery v2 is available here — https://github.com/steve-ssh/FMP_JSONQuery.

Continuation of JQ v2 conversation with Steve Senft-Herrera

Kevin Frank: There are a couple little improvements in v2 we haven’t mentioned yet. Is this a good time?

Steve Senft-Herrera: Sure.

KF: Okay, thanks. One that I really like is that you can now use “=” in place of “EQUALS” — you don’t have to, but you can. In v2 either of these will work…

JSONQuery ( $input ; "region" ; "EQUALS" ; "Asia" ; "" ; "name" )

or

JSONQuery ( $input ; "region" ; "=" ; "Asia" ; "" ; "name" )

KF: …whereas in v1 you had to write out “EQUALS”.

SSH: Yeah, I like that one too.

KF: Another improvement is that when “MATCH_ALL” is your Operator, you can now simply leave that argument blank. As per ex. 197 in the example file, these two statements are equivalent.

and

SSH: It’s a small change, but I like it because there is less to distract the eye from what really matters in the calculation: your input JSON, and the desired key or path to harvest — in this case, “address”.

KF: Completely agree.

The MAP Component

KF: You know there is an absolute favorite item on my list that hasn’t been mentioned yet, and it has to do with the simplification of MAP syntax.

SSH: That is definitely right there at the top of my list of favorite features also. Continue reading “JSONQuery v2 Conversation with Steve Senft-Herrera, part 2”