> For the complete documentation index, see [llms.txt](https://documentation.efalia.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.efalia.com/documentations/efalia-process/vue-ensemble-api/syntaxes-json-jsonpath.md).

# Syntaxes JSON et JSONPath

Ce guide de référence couvre les deux formats utilisés dans les configurations des connecteurs et dans le traitement des réponses d'API dans Efalia Process.

***

## JSON — JavaScript Object Notation

### Présentation

JSON est un format léger d'échange de données structurées. Il est utilisé dans Efalia Process pour :

* Les configurations des connecteurs (ApiRest, Efalia Doc, Contrat Privé…)
* Les corps de requêtes et de réponses HTTP
* Les champs de configuration dans les formulaires

### Syntaxe de Base

**Caractères structurants :**

| Caractère       | Rôle                                                    |
| --------------- | ------------------------------------------------------- |
| `{ }`           | Délimitent un **objet** (ensemble de paires clé/valeur) |
| `[ ]`           | Délimitent un **tableau** (liste ordonnée de valeurs)   |
| `"clé": valeur` | Définissent un **membre** (propriété) de l'objet        |
| `,`             | Séparent les membres (pas de virgule après le dernier)  |

**Types de valeurs :**

| Type           | Exemple                |
| -------------- | ---------------------- |
| Texte (string) | `"Jean-Pierre"`        |
| Nombre entier  | `25`                   |
| Nombre décimal | `3.14`                 |
| Booléen        | `true` ou `false`      |
| Null           | `null`                 |
| Objet imbriqué | `{ "ville": "Paris" }` |
| Tableau        | `["Julie", "Marius"]`  |

### Exemples

**Objet simple :**

```json
{
    "id": 1,
    "nom": "Jean-Pierre",
    "age": 25,
    "actif": true
}
```

**Objet avec tableau imbriqué :**

```json
{
    "id": 1,
    "nom": "Jean-Pierre",
    "age": 25,
    "enfants": [
        "Julie",
        "Marius",
        "Romain"
    ]
}
```

**Tableau d'objets :**

```json
[
    {"id": 1, "nom": "Jean-Pierre"},
    {"id": 2, "nom": "Caroline"},
    {"id": 3, "nom": "Noah"}
]
```

**Objet avec objets imbriqués :**

```json
{
    "id": 12,
    "firstname": "Joe",
    "address": {
        "city": "Paris",
        "street": "43 av. Junot",
        "zipcode": "75018"
    },
    "hobbies": ["lecture", "cinéma", "sport"]
}
```

### Règles à Respecter

{% hint style="warning" %}
**Erreurs courantes**

* Pas de virgule après le **dernier** membre d'un objet ou d'un tableau
* Les clés doivent être entre **guillemets doubles** (pas de guillemets simples)
* Les valeurs texte doivent être entre **guillemets doubles**
* Les commentaires ne sont **pas supportés** en JSON standard (certains connecteurs Process acceptent `//` pour les JSON de configuration)
  {% endhint %}

***

## JSONPath — Requêtes dans un Document JSON

### Présentation

JSONPath est une syntaxe d'expressions permettant de **cibler des données précises** dans un document JSON. Il est utilisé dans Efalia Process principalement dans le connecteur ApiRest (propriété `jsonMappings`) pour extraire des valeurs d'une réponse JSON et les ventiler dans des champs Process.

### Syntaxe de Base

Le caractère `$` représente la **racine** du document JSON. Les niveaux sont séparés par des points (`.`).

**Exemples sur ce JSON :**

```json
{
    "id": 12,
    "firstname": "Joe",
    "address": {
        "city": "Paris",
        "zipcode": "75018"
    },
    "hobbies": ["lecture", "cinéma", "sport"],
    "products": {
        "books": [
            {"title": "Livre A", "author": "Auteur 1", "price": 15},
            {"title": "Livre B", "author": "Auteur 2", "price": 25}
        ]
    }
}
```

| Expression JSONPath          | Résultat                                   |
| ---------------------------- | ------------------------------------------ |
| `$.id`                       | `12`                                       |
| `$.firstname`                | `Joe`                                      |
| `$.address.city`             | `Paris`                                    |
| `$.hobbies[0]`               | `lecture` (premier élément)                |
| `$.hobbies[-1]`              | `sport` (dernier élément)                  |
| `$.hobbies[*]`               | `lecture;cinéma;sport` (tous — multivalué) |
| `$.products.books[0].author` | `Auteur 1`                                 |
| `$.products.books[*].author` | `Auteur 1;Auteur 2` (multivalué)           |

### Accès aux Tableaux

| Expression | Description               |
| ---------- | ------------------------- |
| `[0]`      | Premier élément (index 0) |
| `[-1]`     | Dernier élément           |
| `[0:2]`    | Éléments 0 et 1 (tranche) |
| `[*]`      | Tous les éléments         |

### Filtres sur Tableaux

Les filtres permettent de sélectionner conditionnellement des éléments d'un tableau :

```
$.products.books[?(@.price > 20)]
```

→ Retourne tous les livres dont le prix est supérieur à 20.

Le caractère `@` représente l'**élément courant** du parcours.

| Expression             | Description                     |
| ---------------------- | ------------------------------- |
| `[?(@.prix < 10)]`     | Prix strictement inférieur à 10 |
| `[?(@.prix <= 20)]`    | Prix inférieur ou égal à 20     |
| `[?(@.dispo == true)]` | Condition booléenne             |
| `[?(@.nom != "test")]` | Différent                       |

**Opérateurs supportés :** `==`, `!=`, `<`, `<=`, `>`, `>=`

### Dans Process : Types Supportés

Dans les mappages Process, les données ciblées ne peuvent être que des **types primitifs** :

* `string` (chaîne de caractères)
* `number` (nombre)
* `boolean` (`true`/`false`)
* `date` au format ISO-8601 (ex : `2025-02-16T10:58:44.965071Z`)

Les tableaux de valeurs primitives sont supportés pour alimenter des **champs multivalués** Process.

***

## Utilisation Pratique dans Process

### Dans le Connecteur ApiRest

```json
{
  "url": "http://api.example.com/api/person/12",
  "method": "GET",
  "jsonMappings": {
    "champ_prenom": "$.firstname",
    "champ_ville": "$.address.city",
    "champ_hobbies": "$.hobbies[*]"
  }
}
```

→ `champ_prenom` ← `Joe`, `champ_ville` ← `Paris`, `champ_hobbies` ← `lecture;cinéma;sport`

### Dans les Connecteurs Efalia Doc

Les IDs externes référencent les éléments du Plan de Classement — ce ne sont pas des JSONPath mais des identifiants littéraux configurés dans Efalia Doc.

***

## Outils Utiles

Pour valider vos expressions JSONPath avant de les intégrer dans une configuration Process :

* **Testeur en ligne :** `jsonpath.com` ou `jsonpath-online-evaluator` permettent de tester des expressions sur un JSON exemple
* **Validation JSON :** `jsonlint.com` permet de valider la syntaxe d'un JSON

***

Pour aller plus loin :

* [Connecteur API REST](/documentations/efalia-process/vue-ensemble-api/connecteur-api-rest.md)
* [Vue d'Ensemble API](/documentations/efalia-process/vue-ensemble-api.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://documentation.efalia.com/documentations/efalia-process/vue-ensemble-api/syntaxes-json-jsonpath.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
