cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
forstera
Helper III
Helper III

is it possible to make a filter on a json object ?

Hello all,

 

I need to modify  the value of a specific key in an object before re-injecting it into a rest api call.

I tried several ways but none of them was sucessfull .

 

Yet, I'm trying using the select operation but : 

 

in the from section, would it be possible, instead having body('DemandeInfosVue')?['SearchFields']

 

to write something like : 

body('DemandeInfosVue')?['SearchFields'] WHERE  body('DemandeInfosVue')?['SearchFields']?[Id] = 23

 

 

forstera_0-1625135135718.png

Thanks to all for your help 🙂

 

 

1 ACCEPTED SOLUTION

Accepted Solutions

@DamoBird365 thanks very much,

Yes, I think this is the only way.. I'll try to do it this way.

Thanks very much for your time 🙂

 

View solution in original post

12 REPLIES 12
DamoBird365
Super User
Super User

Hi @forstera 

 

You would need to use the filter array first and use the result of that filter in your select.  Alternatively, if your objects run in sequential order and are numbers 1-> 23, you could call object 23 as expression body('DemandeInfosVue')?['SearchFields'][22], note objects start from 0.

 

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Cheers,
Damien


P.S. take a look at my new blog here and like & subscribe to my YouTube Channel thanks 😉

Hello DamoBird465,

 

Thanks for your answer. Unfortunately, if I'm right (because I'm very new in Power Automate) I can't use an array  because my JSON object is relative complexe : there's an array of x elements (and each element has several properties) inside a property. If I wan to use an array, I should make something to extract every parts of my object, modify the one I want and re-construct the object after that ; I dont know if it's possible ...

 

Hi @forstera 

 

can you share the json array?

 

Damien

Here's the schema of my object :

 

{
    "type": "object",
    "properties": {
        "Id": {
            "type": "integer"
        },
        "DataClassId": {
            "type": "string"
        },
        "Designation": {
            "type": "string"
        },
        "SearchFields": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "Id": {
                        "type": "integer"
                    },
                    "FieldId": {
                        "type": "string"
                    },
                    "Position": {
                        "type": "integer"
                    },
                    "Width": {
                        "type": "integer"
                    },
                    "HeaderText": {
                        "type": "string"
                    },
                    "TypeName": {
                        "type": "string"
                    },
                    "SearchText": {},
                    "SortDirection": {},
                    "DropDownItems": {},
                    "GroupIndex": {},
                    "PrimaryKeyIndex": {},
                    "IsListColumn": {
                        "type": "boolean"
                    },
                    "Operator": {}
                },
                "required": [
                    "Id",
                    "FieldId",
                    "Position",
                    "Width",
                    "HeaderText",
                    "TypeName",
                    "SearchText",
                    "SortDirection",
                    "DropDownItems",
                    "GroupIndex",
                    "PrimaryKeyIndex",
                    "IsListColumn",
                    "Operator"
                ]
            }
        },
        "Me": {
            "type": "boolean"
        },
        "IdObject": {
            "type": "string"
        },
        "HRef": {
            "type": "string"
        }
    }
}

 

Thanks very much 🙂

and here' some real data : 

{
  "Id": 1416,
  "DataClassId": "Anlass",
  "Designation": "PA-Classes",
  "SearchFields": [
    {
      "Id": 0,
      "FieldId": "Id1",
      "Position": 1,
      "Width": 73,
      "HeaderText": "ID événement",
      "TypeName": "Int32",
      "SearchText": null,
      "SortDirection": null,
      "DropDownItems": null,
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 49,
      "FieldId": "AnlassNr",
      "Position": 2,
      "Width": 173,
      "HeaderText": "Numéro d'événement",
      "TypeName": "String",
      "SearchText": null,
      "SortDirection": "asc",
      "DropDownItems": null,
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 51,
      "FieldId": "AnlassBez",
      "Position": 3,
      "Width": 301,
      "HeaderText": "Désignation d'événement",
      "TypeName": "String",
      "SearchText": null,
      "SortDirection": null,
      "DropDownItems": null,
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 59,
      "FieldId": "Veranstalter",
      "Position": 4,
      "Width": 125,
      "HeaderText": "Organisateur",
      "TypeName": "String",
      "SearchText": null,
      "SortDirection": "asc",
      "DropDownItems": [
        "GBSL",
        "GBSL-FMS",
        "GBSL-GAB",
        "GBSL-HMS",
        "GBSL-MAR",
        "GBSL-WMS",
        "GFB",
        "GFB-EMSp",
        "GFB-ESC",
        "GFB-Pass",
        "GFB-RRM"
      ],
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 50,
      "FieldId": "AnlassStatus",
      "Position": 5,
      "Width": 419,
      "HeaderText": "Statut (événement)",
      "TypeName": "String",
      "SearchText": null,
      "SortDirection": null,
      "DropDownItems": null,
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 71,
      "FieldId": "AnzahlTeilnehmer",
      "Position": 6,
      "Width": 112,
      "HeaderText": "Par Ok total",
      "TypeName": "Int32",
      "SearchText": null,
      "SortDirection": null,
      "DropDownItems": null,
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 72,
      "FieldId": "Leitung IDPerson",
      "Position": 7,
      "Width": 88,
      "HeaderText": "ID personne de la direction générale",
      "TypeName": "Nullable<Int32>",
      "SearchText": null,
      "SortDirection": null,
      "DropDownItems": null,
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 73,
      "FieldId": "UNTERRICHTSSPRACHE_BEZEICHNUNG",
      "Position": 8,
      "Width": 55,
      "HeaderText": "Langue d’enseignement",
      "TypeName": "String",
      "SearchText": null,
      "SortDirection": null,
      "DropDownItems": [
        "Allemand (Suisse)",
        "Français",
        "Deutsch",
        "Französisch",
        "Italienisch",
        "Bilingue",
        "Englisch"
      ],
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    },
    {
      "Id": 74,
      "FieldId": "Anlassleitung",
      "Position": 9,
      "Width": 140,
      "HeaderText": "Direction (publication)",
      "TypeName": "String",
      "SearchText": null,
      "SortDirection": null,
      "DropDownItems": null,
      "GroupIndex": null,
      "PrimaryKeyIndex": null,
      "IsListColumn": false,
      "Operator": null
    }
  ],
  "Me": false,
  "IdObject": "Anlass_PA-Classes",
  "HRef": "/restApi/Search/Definitions/Anlass_PA-Classes"
}

as you can see, every field has an property 'Id' and a property 'Searchtext'. The idea was to be able to modify the value of the property 'SearchText' of a given Id field before sending the object via a rest api call to get a filtered result

Hi @forstera 

 

I stuck your json into a compose and came up with the following:

DamoBird365_0-1625209439700.png

 

You can filter on the searchfields array for an id equal to a number and then update the searchtext on that result using setProperty.

 

DamoBird365_1-1625209518508.png

 

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Cheers,
Damien


P.S. take a look at my new blog here and like & subscribe to my YouTube Channel thanks 😉

@DamoBird365 

Wow, thanks very much , I'll try to do that. 

But I've the following question.

if I understand your way, you transfered all the 'Searchfields' into an array than you modified one record after having filtered the array with the setproperty() function

But after that, I need to recompose my object to send my REST API request.  I dont think (but can you confirm that) that when we work on the values of the array that my original object is modified, too no ? (creating an array from an object is a copy, not a pointer to it no ?)

Thanks very very much 

DamoBird365
Super User
Super User

Hi @forstera 

 

There might be an easier way of doing this, albeit I cannot think of one as you are trying to search an array in order to specifically update.  

 

My thinking would be to use select to get a list of ID's.

 

DamoBird365_3-1625212747150.png

 

Stick the result into an apply to each.  Filter the array on each ID and update the searchtext (assuming this is not all Id's, you can use a condition or read here https://www.damobird365.com/if-elseif-else-in-power-automate-simplified/ on how to use an array to pass parameters).  This will allow you to update if match id or leave as is.  Append each result to a new Array.

 

DamoBird365_1-1625212548477.png

 

Then initiliase a new object and set the property of the searchfields array to the new array created in the apply to each.

 

DamoBird365_2-1625212590484.png

 

How does that work for you?

 

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Cheers,
Damien


P.S. take a look at my new blog here and like & subscribe to my YouTube Channel thanks 😉

@DamoBird365 thanks very much,

Yes, I think this is the only way.. I'll try to do it this way.

Thanks very much for your time 🙂

 

View solution in original post

Hi DamoBird365 and so sorry for a so long time to answer ! As I work for a school, my time to develop new solutions is very very limited.  From March to October, I can't do anything, unfortunately, because current tasks take up all my time.

But 🙂 from next week it will be time to continue my developments with PowerAutomate ; very excited to do that 🙂

So thanks again for your great help ; I'll have to refresh my mind  for all what we've done 🙂

Have a nice day 🙂

forstera
Helper III
Helper III

Hello all 🙂

I'm back with that problem ! 🙂 

I decided using the @DamoBird365 solution which seems to be the best but, as I'm a beginner with flow, I get some trouble.

The idea is copying a json objet into an array. than filter the array and finally modify a value of the result before sending back the whole array into a JSON objcect.

For  the while, I'm just able to copy my json into an array which looks like this :

 

[
  {
    "Id": 0,
    "FieldId": "Id1",
    "Position": 1,
    "Width": 149,
    "HeaderText": "ID événement",
    "TypeName": "Int32",
    "SearchText": null,
    "SortDirection": null,
    "DropDownItems": null,
    "GroupIndex": null,
    "PrimaryKeyIndex": null,
    "IsListColumn": false,
    "Operator": null
  },
  {
    "Id": 1,
    "FieldId": "AnlassNr",
    "Position": 2,
    "Width": 190,
    "HeaderText": "Numéro d'événement",
    "TypeName": "String",
    "SearchText": null,
    "SortDirection": "asc",
    "DropDownItems": null,
    "GroupIndex": null,
    "PrimaryKeyIndex": null,
    "IsListColumn": false,
    "Operator": null
  },
and so ...

 


Now, I'm trying to filter that array according to the field [FieldId] which should be equal to "Veranstalter", so I made the following : 
 
forstera_3-1633606156671.png
 

 

When running my flow, I've all my values in my array but the result if always an empty body ; I think that in the Filter Array function , I'm not defining the field I'd like to filter correctly (item()?['FieldId]) .. so if someone has an idea 🙂 

Thanks to all for your help 🙂 

 

 

 

ok i change the field from [FieldId] to ['Id'] because the 'equal to' is only available with values, not texte ! 

Stupid error from me ! 

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

M365 768x460.jpg

Microsoft 365 Collaboration Conference | December 7–9, 2021

Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.

Top Solution Authors
Users online (2,817)