LogoLogo
Changelog
18.5
18.5
  • Welcome
    • Welcome to Airkit 👋
    • Quickstart
  • Concepts
    • Sessions
      • Linking to Sessions
    • Actors
      • Conversations with Actors
  • Tutorials
    • Building A Contact Form
      • Building the Web UI
      • Building the Database
      • Finalizing the App
      • Connecting Forms to Salesforce
    • Styles, Themes, and Templates
      • Changing the header
      • Changing the Theme
      • Using a custom font
      • Using Animations
    • Multi-Page Form
      • Creating the App Object in AirData
      • Building the Form’s UI
      • Creating the Data Flow to insert data
      • Connecting the Data Flow to the UI
      • Previewing and Publishing the app
    • Scheduling and Follow-Up App
      • Collecting Contact Information
      • Creating Appointment Times
      • Saving Appointment Information
      • Scheduling Appointment Reminder
      • Automating Proactive Follow-Up
      • Requesting Feedback
    • Custom Integrations (Petfinder App)
      • Querying the Petfinder API
      • Displaying Petfinder Data
  • Platform
    • Console
      • Apps
      • Activity
      • App Health
      • Datastores
      • Integrations
      • Conversations
      • Resources
      • API
      • Settings
    • Studio
      • Builder Bar
        • Triggers Builder
        • Web Flows Builder
        • Chat Bots Builder
        • Answer Flows Builder
        • Voice Bots Builder
        • Connections Builder
        • Notifications Builder
        • AirData Builder
        • Media Library
        • Theme Builder
        • Schedules Builder
        • Settings
      • App Preview
      • Data Flows
      • Variable Tree
      • Data Model Editor
      • Events
        • Session Started Events
        • Trigger Events
        • Control Events
        • Session Events
        • Activity Group Events
        • Action Chains
  • Data and Integrations
    • Working with Data
      • Variable Namespaces
      • Standard Session Data
      • AirData
        • AirData App Objects
        • Datastores
        • Identity Objects
        • Place Objects
        • Schedule Objects
      • Airscript Quickstart
        • Working with Dates and Times
        • Working with Missing Values
        • Working with URLs and Base64
      • Pull Values from Lists and Objects
        • Path Expressions
        • Query Expressions
      • Making Forms from Data Models
    • Integrations
      • First Party Integrations
        • Creating A Salesforce Lead
        • Creating a Zendesk Ticket
        • Creating SFTP Credentials
        • Swagger Schema Validation
        • First Party Integration Reference
          • Airtable Integration
          • Genesys Widget Integration
          • Google Integration
          • Guidewire Integration
          • Hubspot Integration
          • Kustomer Integration
          • MX Integration
          • Plaid Integration
          • Salesforce Integration
          • SendGrid Integration
          • SFTP Integration
          • Shopify Integration
          • Stripe Integration
          • Twilio Integration
          • Zendesk Integration
      • Custom Integrations
        • OAuth 2.0
        • API Token
        • HTTP Basic Auth
        • Custom Token
        • SFTP
        • Examples: Twitter and Giphy
      • App APIs
        • Building an App API
      • Subscriptions (Web Hooks)
  • Texts, Calls and Emails
    • SMS
      • SMS Notification Basics
      • Chat Bot Basics
      • Texting Journey Links
      • Data from Inbound Calls/SMS
      • Connecting Twilio Numbers
    • Emails
      • Email Notification Basics
      • Sending Emails by Data Operation
      • Connecting Email Addresses
    • Voice Bots
      • Voice Bot Basics
    • Conversation Chat Bots
      • Setting Up Answer Groups
      • Configuring Conversation Chat Bots
        • Salesforce Relays
        • Kustomer Relays
  • Web Apps
    • Forms
      • Displaying Controls Dynamically
      • Repeating Elements
      • Prefilling Forms
      • Validation of User Data
      • Capture Secure User Data
      • Progress Bars
      • Dropdown Menus
      • Electronic Signatures
    • Calendars
      • Customizing Schedule Availability
      • Using Availability Schedules
      • Rescheduling Deflected Calls
      • Integrating to External Calendars
    • Maps and Addresses
      • Maps
      • Addresses
      • User's Current Location
      • Address Search Map Binding
    • Payments
      • Creating a Stripe Integration
    • Timers and Reminders
      • Setting Timers
      • Setting up Periodic Tasks
    • PDFs
      • Creating a PDF
      • Working with Existing PDFs
      • Adding Assets to PDF
    • Assets and Media
      • Using the File Upload Web Control
      • Working with Files and Media
      • Assets and Data Operations
      • Sending Assets to Remote Servers
    • Styling Overview
      • Web Control Styling Properties
        • Animations
      • Themes and Control Variants
        • Importing and Exporting Themes
      • Working with Custom Assets
      • Page Layouts
        • Creating an App Header
    • Publishing
      • Publish and Manage Deployments
      • Configure Application Resources
      • Editing an Application
      • Importing/Exporting Apps
      • Tying Variables to Deployments
    • Advanced
      • Custom Controls
      • Creating Custom Functions
    • Accessibility
      • Accessibility in Airkit
      • Connecting Labels to Input Controls
  • Authentication
    • SAML Authentication
    • OAuth 2.0 - Google
    • OAuth 2.0 - Okta
    • OAuth 2.0 - Auth0
    • Azure AD B2C
    • Authentication Apps and Secure Apps
  • Embeds
    • SDK Overview
      • SDK Quickstart
      • SDK Authentication
      • Passing Data
      • Configuration
      • Configuration Examples
      • Airkit Lightning Component (Salesforce)
  • Analytics and Administration
    • Airkit Organizations
    • Adding Users to Airkit
    • User Roles
      • Working with Custom Roles
    • JIT Provisioning for an Organization
    • SAML SSO for an Organization
    • Managing the Application Lifecycle
    • Environments
      • Environmental Governance
    • Getting Application Metadata
    • Custom Domains
    • Analytics Overview
      • App Events to Splunk
      • App Events to AWS S3 Buckets
      • Audit Logs to AWS S3 Buckets
      • View Data in Activity Explorer
      • Snowflake Analytics Schema
      • Power BI
      • Heap and GTM Integrations
        • Setting up Analytics with GTM
        • Setting up Analytics with Heap
    • Error Management
      • Logging Errors
      • Setting up Email Notifiers
      • Integrating Error Notifiers to Slack
  • Security and Compliance
    • App Security FAQ
    • Data Masking and Auditing
    • IP Ranges
    • Encrypting Data
    • SSL Auth
    • TCPA
    • Cookie Policies
    • Supported Browsers
    • Realms
  • Reference Docs
    • Reference Documentation Overview
    • Airscript
      • Text Functions
        • CAPITALIZE
        • CONCAT
        • ISSTRING
        • LOWERCASE
        • PADSTRING
        • REPLACE
        • REPT
        • SPLIT
        • STRING_COMPARE
        • STRING_FIND
        • STRIP
        • SUBSTITUTE
        • SUBSTRING
        • TITLECASE
        • TRIM
        • UPPERCASE
      • DateTime Functions
        • ADD_TO_DATE
        • ADD_TO_DATETIME
        • DATE
        • DATETIME
        • DATETIME_DELTA
        • DATETIME_FROM_FORMAT
        • DATETIME_FROM_TIMESTAMP
        • DATE_DELTA
        • DATE_FROM_DATETIME
        • DATE_FROM_FORMAT
        • DAY
        • DAYS
        • FORMAT_DATE
        • FORMAT_DATETIME
        • FORMAT_TIME
        • HOUR
        • ISO_WEEK
        • MINUTE
        • MONTH
        • NOW
        • SECOND
        • SUBTRACT_FROM_DATE
        • SUBTRACT_FROM_DATETIME
        • TIME
        • TIMESTAMP_FROM_DATETIME
        • TIME_DELTA
        • TIME_FROM_DATETIME
        • TIME_FROM_FORMAT
        • TODAY
        • UPDATE_DATE
        • UPDATE_DATETIME
        • UPDATE_DAY
        • UPDATE_HOUR
        • UPDATE_MILLISECOND
        • UPDATE_MINUTE
        • UPDATE_MONTH
        • UPDATE_SECOND
        • UPDATE_TIME
        • UPDATE_TIMEZONE
        • UPDATE_YEAR
        • WEEK
        • WEEKDAY
        • YEAR
      • List Functions
        • CONTAINS
        • FIRST
        • FLAT
        • JOIN
        • LAST
        • LENGTH
        • REMOVE_EMPTY
        • REVERSE
        • SHUFFLE
      • Object Functions
        • KEYS
        • MERGE_OBJECTS
        • OBJECT_TO_SOAP
        • OBJECT_TO_XML
        • SOAP_TO_OBJECT
        • SOAP_HEADER_TO_OBJECT
        • VALUES
        • XML_TO_OBJECT
      • Math Functions
        • ABS
        • ACOS
        • ACOSH
        • ACOT
        • ACOTH
        • ASIN
        • ASINH
        • ATAN
        • ATAN2
        • ATANH
        • CEILING
        • COMBIN
        • COMBINA
        • COS
        • COSH
        • COT
        • COTH
        • CSC
        • CSCH
        • DEGREES
        • EVEN
        • EXP
        • FACT
        • FACTDOUBLE
        • FLOOR
        • GCD
        • ISEVEN
        • ISNUMBER
        • ISODD
        • LATLNGDISTANCE
        • LCM
        • LN
        • LOG
        • MAX
        • MIN
        • MROUND
        • MULTINOMIAL
        • ODD
        • PI
        • POWER
        • PRODUCT
        • RADIANS
        • RANDOM
        • RANGE
        • ROUND
        • ROUNDDOWN
        • ROUNDUP
        • SEC
        • SECH
        • SIGN
        • SIN
        • SINH
        • SQRT
        • SQRTPI
        • SUM
        • SUMSQ
        • TAN
        • TANH
        • TRUNC
      • Conditional Functions
        • EQUAL
        • IF
        • ISEMPTY
        • ISNOTEMPTY
        • NOT
      • Currency Functions
        • CURRENCY
        • FORMAT_CURRENCY
        • PARSE_CURRENCY
      • Phone Functions
        • FORMAT_PHONE
        • ISPHONE
        • PARSE_PHONE
      • Email Functions
        • ISEMAIL
      • Number Formatting Functions
        • ARABIC
        • FORMAT_NUMBER
        • PARSE_NUMBER
        • ROMAN
      • Data Type Functions
        • FROM_JSON
        • TO_JSON
        • TYPEOF
      • Asset Functions
        • ASSET_SIZE
        • ASSET_STATE
        • ASSET_THUMBNAIL_URL
        • ASSET_TO_URI
        • ASSET_TYPE
        • URI_TO_ASSET
      • Encoding Functions
        • BASE
        • BASE64_DECODE
        • BASE64_ENCODE
        • HMAC_MD5
        • HMAC_SHA1
        • HMAC_SHA256
        • MD5
        • SHA1
        • SHA256
        • URL_DECODE
        • URL_ENCODE
        • UUID
        • VALUE_OF
      • Error Handling Functions
        • THROW
        • TRY
      • Form and Validation Functions
        • FIRST_VALIDATION
        • RUN_VALIDATIONS
      • Arithmetic Operators
        • Addition (+)
        • Subtraction (-)
        • Multiplication (*)
        • Division (/)
        • Remainder (%)
      • Comparison Operators
        • Equality (=)
        • Inequality (<>, !=)
        • Ordering (<, <=, > , >=)
      • Logical Operators
        • AND
        • OR
        • XOR
        • Null Coalescing Operator (??)
      • Advanced Expressions
        • LET...IN
        • User Defined Functions
    • Web Controls
      • Button
      • Checkbox
      • Chat
      • Simple Checkbox List
      • Container
      • Container List
      • Credit Card
      • Currency Input
      • Date Input
      • Date Picker
      • Dropdown List
      • Email Input
      • Embedded External Content (iFrame)
      • Fieldset Container
      • File Upload
      • Form
      • Hyperlink
      • Image
      • Inline Container
      • Label
      • Map
      • Markdown
      • Number Input
      • Payment Request Button
      • Phone Input
      • Place Search Input
      • Progress Bar
      • QR Code
      • Radio Button
      • Simple Radio List
      • Scheduler
      • Secure String Input
      • Selectable Container
      • Signature Input
      • Text Area
      • Text Input
      • Time Input
      • Web Flow
      • Web Page
    • Voice and Chat Controls
      • Decision Menu
      • Forward Call
      • Secure Touchtone Capture
      • Text Response Capture
      • Touchtone Capture
    • Data Operations
      • AirData Request
        • DELETE
        • PUT
        • INSERT
        • PATCH
        • QUERY
        • DEPRECATED_QUERY
      • Calendar Search
      • Close Conversation
      • Conversation Transcript
      • Create File
      • Delete Assets
      • Download Encoded Asset
      • Early Return
      • Fetch Agent Information
      • Fetch Asset Details
      • Fetch Routing Flow Stats
      • Find Conversations by Customer Identifier
      • Fill PDF Form
      • Google
      • HTML to PDF
      • HTTP Request
        • Using an API With Paging
      • JWT Generation
      • Merge PDF
      • Move Conversation to Routing Flow
      • Opt Out Search
      • Opt Out List
      • Run Data Flow
      • Run Event in Journey
      • Salesforce
      • Secure Value Retrieval
      • Send Email
      • Send Message to Conversation
      • SFTP
      • Start Journey
      • Swagger Schema Validation
      • Transform
      • Update Customer Identifier
      • Wait
      • XML to JSON
      • Zendesk
      • ZIP File
    • Actions
      • Analytics Identify
      • Analytics Send Event
      • Close Modal
      • Condition
      • End Session
      • Extend Session Expiration Time
      • Initialize Actor
      • Log Custom Event
      • Metric: Count
      • Metric: Field
      • Metric: Start Timer
      • Metric: Statistic
      • Metric: Stop Timer
      • Navigate To Web Flow
      • Navigate to Web Page
      • Open Modal
      • Run Data Flow
      • Run Data Flow Repeatedly
      • Run Embedded Outgoing Event
      • Run Event
      • Send Email
      • Send SMS
      • Set Authentication
      • Set Identifier
      • Set Variable
      • Start Chat Bot
      • Start Voice Bot
      • Start Timer
      • Stop Timer
      • Throw
      • Trigger Form Validation
      • Try
    • Conversation Actions
      • Ask A Question
      • Capture User Response
      • Close Conversation
      • Move Customer to Resource
      • Move Conversation to Routing Flow
      • Quick Replies
      • Run Answer Flow
      • Start Conversation Chat Bot
      • Start Conversation
      • Send Link
      • Text Answer
      • Update Customer Identifier
    • Primitive Data Types
      • Any (JSON)
      • Asset
        • Detailed Asset
      • Boolean
      • Currency
      • Date
      • DateTime
      • Email
      • List
      • Null
      • Number
      • Phone
      • Text
      • Time
  • Transportation Products Catalog
    • The Transportation Products API
      • GET products
      • GET product-by-id
  • Release Notes
    • CXR Overview
    • CXR Upgrades and Migrations
Powered by GitBook
On this page
  • Syntax
  • Declaration
  • Expressions
  • Examples
  • Simple Query Expressions
  • Sorting
  • Limiting Returned Instances
  • Filtering
  • Joining
  • Creating Objects through Query Expressions
  • Querying Objects
  • Want more complex examples?

Was this helpful?

  1. Data and Integrations
  2. Working with Data
  3. Pull Values from Lists and Objects

Query Expressions

PreviousPath ExpressionsNextMaking Forms from Data Models

Last updated 1 year ago

Was this helpful?

Airscript's Query Expressions are similar to . They are used to select and modify values from Lists, Objects, or, most commonly, Lists of Objects.

Query Expressions are designed to precisely sort, filter, or otherwise restructure long, complex data. They will often contain within them to refer to values nested within the data they are querying.

Syntax

Declaration

FROM
    itemBinding = identifier,
  [ indexBinding = identifier, [ collectionBinding = identifier ] ]
IN
    data
[WHERE expression]
[ORDER BY expression [ASCENDING | DESCENDING]]
[LIMIT expression [OFFSET expression]]
SELECT [DISTINCT] selectExpression

Declarations in square brackets are not required.

Expressions

FROM expression (required, expects type: string)

The designation of the items in the data.

This designation will be used throughout the rest of the Query Expression to refer to each item; nested Path Expressions that refer to values stored in Listed Objects will begin with this designation.

IN expression (required, expects type: List or Object )

The data to Query.

WHERE expression (optional, expects type: Boolean)

The condition under which items will be returned. Items will be returned only when the result in this conditional evaluating to TRUE.

ORDER BY expression (optional, expects type: any)

Designates what will be used to sort the returned datat. Ordering defaults to least to greatest, but appending DESCENDING after the sorting_property will reverse this.

LIMIT expression (optional, expects type: Number)

The number of instances to include in the resulting data.

**SELECT expression ** (required, expects type: any)

Defines what will be returned by the Query Expression and how it will be structured. Most commonly, this defines each item in the returned List, although it can also be used to define properties in an Object.

Examples

To demonstrate how this syntax is applied, assume all of the following examples have access to the List of Objects, list_of_books:

list_of_books = [
  {
    "title": "Angels & Demons",
    "author": "Dan Brown",
    "isbn": "9781416524793",
    "genres": [
      "Fiction"
    ]
  },
  {
    "title": "The Da Vinci Code",
    "author": "Dan Brown",
    "isbn": "9780307879257",
    "genres": [
      "Fiction"
    ]
  },
  {
    "title": "Hackers: Heroes of the Computer Revolution",
    "author": "Steven Levy",
    "isbn": "9780141000510",
    "genres": [
      "History",
      "Nonfiction"
    ]
  },
  {
    "title": "Moonwalking with Einstein: The Art and Science of Remembering Everything",
    "author": "Joshua Foer",
    "isbn": "9781594202292",
    "genres": [
      "Nonfiction"
    ]
  }
]

Simple Query Expressions

The simplest Query Expressions contain only the FROM, IN, and SELECT clauses, as these are the only clauses required to define a Query Expression.

The most basic Query Expression does nothing but return the original collection:

FROM book IN list_of_books
SELECT book -> [
  {
    "title": "Angels & Demons",
    "author": "Dan Brown",
    "isbn": "9781416524793",
    "genres": [
      "Fiction"
    ]
  },
  {
    "title": "The Da Vinci Code",
    "author": "Dan Brown",
    "isbn": "9780307879257",
    "genres": [
      "Fiction"
    ]
  },
  {
    "title": "Hackers: Heroes of the Computer Revolution",
    "author": "Steven Levy",
    "isbn": "9780141000510",
    "genres": [
      "History",
      "Nonfiction"
    ]
  },
  {
    "title": "Moonwalking with Einstein: The Art and Science of Remembering Everything",
    "author": "Joshua Foer",
    "isbn": "9781594202292",
    "genres": [
      "Nonfiction"
    ]
  }
]

To transform each instance in the returned List, you can modify the Airscript expression given to the SELECT clause. For instance, to a return a List of only the ISBN numbers given for each book, you would use the Path Expression in the following example:

FROM book IN list_of_books
SELECT book.isbn
=> [
  "9781416524793",
  "9781416524793",
  "9781594202292",
  "9780141000510"
]
FROM
  book
IN
  list_of_books
SELECT
  UPPERCASE(book.title) -> [
  "ANGELS & DEMONS",
  "THE DA VINCI CODE",
  "HACKERS: HEROES OF THE COMPUTER REVOLUTION",
  "MOONWALKING WITH EINSTEIN: THE ART AND SCIENCE OF REMEMBERING EVERYTHING"
]

Sorting

The ORBER BY clause is used to sort a List of Objects by the value of one of the Object properties. For instance, the following example sorts list_of_books by the value of each Object's author property:

FROM
  book
IN
  list_of_books
ORDER BY
  book.author
SELECT
  book -> [
  {
    "title": "Angels & Demons",
    "author": "Dan Brown",
    "isbn": "9781416524793",
    "genres": [
      "Fiction"
    ]
  },
  {
    "title": "The Da Vinci Code",
    "author": "Dan Brown",
    "isbn": "9780307879257",
    "genres": [
      "Fiction"
    ]
  },
  {
    "title": "Moonwalking with Einstein: The Art and Science of Remembering Everything",
    "author": "Joshua Foer",
    "isbn": "9781594202292",
    "genres": [
      "Nonfiction"
    ]
  },
  {
    "title": "Hackers: Heroes of the Computer Revolution",
    "author": "Steven Levy",
    "isbn": "9780141000510",
    "genres": [
      "History",
      "Nonfiction"
    ]
  }
]

Note that the items in the returned List are in alphabetical order in respect to their author properties. To reverse that order, append DESCENDING after book.author, such as in the following example:

FROM
  book
IN
  list_of_books
ORDER BY
  book.author
DESCENDING
SELECT
  book -> [
  {
    "title": "Hackers: Heroes of the Computer Revolution",
    "author": "Steven Levy",
    "isbn": "9780141000510",
    "genres": [
      "History",
      "Nonfiction"
    ]
  },
  {
    "title": "Moonwalking with Einstein: The Art and Science of Remembering Everything",
    "author": "Joshua Foer",
    "isbn": "9781594202292",
    "genres": [
      "Nonfiction"
    ]
  },
  {
    "title": "Angels & Demons",
    "author": "Dan Brown",
    "isbn": "9781416524793",
    "genres": [
      "Fiction"
    ]
  },
  {
    "title": "The Da Vinci Code",
    "author": "Dan Brown",
    "isbn": "9780307879257",
    "genres": [
      "Fiction"
    ]
  }
]

Limiting Returned Instances

The LIMIT clause can be used to limit the number of items in the returned List by defining the maximum number of items that the returned List can contain. For instance, the follow example returns a List that contains only two book titles:

FROM
  book
IN
  list_of_books
LIMIT
  2
SELECT
  book.title -> [
  "Angels & Demons",
  "The Da Vinci Code"
]

Filtering

The WHERE clause is used to define which items in a List of Objects will be included in the returned List. An item will be included if the conditional given to the WHERE clause evaluates to TRUE when that item is used to evaluate it.

For instance, to search the list_of_books for all books written by a specific author, we could use the following expression to require that the author property of the book be equal to “Dan Brown”:

FROM book IN list_of_books
WHERE book.author = "Dan Brown"
SELECT book
=> [
  { 
    title: "Angels & Demons"
    author: "Dan Brown"
    isbn: "9781416524793"
    genres: ["Fiction"]
  },
  {
    title: "The Da Vinci Code",
    author: "Dan Brown",
    isbn: "9780307879257",
    genres: ["Fiction"]
  }
]

To filter any duplicate items out of the resulting list, append the DISTINCT keyword to the DISTINCT clause. The following example shows how this methodology can be used to generate a List of authors where each author is unique:

FROM
  book
IN
  list_of_books
SELECT DISTINCT
  book.author -> [
  "Dan Brown",
  "Steven Levy",
  "Joshua Foer"
]

Joining

Query Expressions can also be used to relate one data set to another. For instance, say we have variable named list_of_genres that contains a List of genre Objects, like so:

list_of_genres = [
  {
    "name": "Fiction",
    "description": "..."
  },
  {
    "name": "History",
    "description": "..."
  },
  {
    "name": "Nonfiction",
    "description": "..."
  },
  {
    "name": "Mystery",
    "description": "..."
  }
]
FROM
  genre_name
IN
  FLAT(list_of_books[*].genres)
SELECT DISTINCT
  (
    FROM
      genre
    IN
      list_of_genres
    WHERE
      genre.name = genre_name
    SELECT
      genre
  )[0] -> [
  {
    "name": "Fiction",
    "description": "..."
  },
  {
    "name": "History",
    "description": "..."
  },
  {
    "name": "Nonfiction",
    "description": "..."
  }
]

The same functionality can also be achieved by using a Path Expression rather than nesting another Query Expression:

FROM
  genre_name
IN
  FLAT(list_of_books[*].genres)
SELECT DISTINCT
  (list_of_genres[?(@.name = genre_name)]
  )[0] -> [
  {
    "name": "Fiction",
    "description": "..."
  },
  {
    "name": "History",
    "description": "..."
  },
  {
    "name": "Nonfiction",
    "description": "..."
  }
]

Creating Objects through Query Expressions

Query Expressions can be used to create new Objects by defining key: value pairs in the SELECT clause. Note that in order to use a value as a key, it will need to explicitly placed inside a string and designated an Airscript expression to be parsed before evaluation by placing it between double curly brackets:

FROM
  book
IN
  list_of_books
SELECT
  "{{book.isbn}}": {
    "title": book.title,
    "author": book.author,
    "genres": book.genres
  } -> {
  "9781416524793": {
    "title": "Angels & Demons",
    "author": "Dan Brown",
    "genres": [
      "Fiction"
    ]
  },
  "9780307879257": {
    "title": "The Da Vinci Code",
    "author": "Dan Brown",
    "genres": [
      "Fiction"
    ]
  },
  "9780141000510": {
    "title": "Hackers: Heroes of the Computer Revolution",
    "author": "Steven Levy",
    "genres": [
      "History",
      "Nonfiction"
    ]
  },
  "9781594202292": {
    "title": "Moonwalking with Einstein: The Art and Science of Remembering Everything",
    "author": "Joshua Foer",
    "genres": [
      "Nonfiction"
    ]
  }
}

Querying Objects

Query Expressions can query Objects as well as Lists. In such cases, you can use a special FROM clause to access both parts of each key/value pair within the Object you iterate through. The first string you give the FROM clause will bind to each value, and the second string will bind to each key. This allows you to pull a list of all the keys in an Object, such as in the following example:

FROM
  item,
  key
IN
  { "One": 1, "Two": 2 }
SELECT
  key -> [
  "One",
  "Two"
]

Similarly, you can generate a List of all the values in a Object, such as in the following example:

FROM
  item,
  key
IN
  { "One": 1, "Two": 2 }
SELECT
  item -> [
  1,
  2
]

Querying an Object is otherwise analogous to Querying a List. The WHERE clause, for instance, can be used to pull only values that meet certain conditions, the ORDER BY clause can be used to sort the returned values, and the returned values can also be used to create new Objects.

Want more complex examples?

The examples covered in this document are meant to highlight how Query Expressions can be used in some of the most simple use cases. If you want to learn more about how Query Expressions are being used in the wild, check out our Builder Community:

Airscript functions an also be used to define the Airscript expression in the SELECT clause. For instance, the following example uses the function to generate a List of book titles in entirely capital letters:

For more on how Airscript handles the ordering of different data types, see . This document is focused primarily on Airscript's out-of-the-box comparison operators, but the ordering conventions discussed are also used by the ORDER BY clause while sorting.

There are many ways to create conditional expressions. For a more detailed dive into what sort of conditional expressions are available out-of-the-box, see the reference documentation on and .

If we want to generate a List of genres that only contains the genres referenced in list_of_books, we can filter list_of_genres by each distinct genre in list_of_books. Doing so requires nesting one Query Expression within another and using the Airscript function to merge nested Lists:

LINQ
Path Expressions
UPPERCASE
Ordering
Conditional Functions
Comparison Operators
FLAT