[PS/JSON] filter probleem

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • thanx
  • Registratie: Oktober 2002
  • Laatst online: 20-02 14:17
Als newbe probeer ik via PS een webservice uit te lezen.
Authentication en ophalen van volledige tabellen lukt me wel, maar om de hoeveelheid data die ik ophaal te beperken wil ik graag filteren in de query. (Ik weet wel dat ik dat filteren ook later zou kunnen doen op het PS object)

Het probleem wat ik heb is dat ik niet weet hoe ik om de quotes in het filter moet werken.
Een filter zonder exra quotes werkt prima. (bijvoorbeeld filteren op waarde 1)
$var = Invoke-RestMethod -Uri 'https://webservice.local/data/tabel?$filter=demovalue ne 1' -ContentType 'application/json' -Headers $headers

Maar als ik wil filteren op een string dan worden extra quotes verwacht rondom de string en hoe ik dat moet doen is mij een raadsel

$var = Invoke-RestMethod -Uri 'https://webservice.local/data/tabel?$filter=demostring ne 'test'' -ContentType 'application/json' -Headers $headers

Ik heb al voorbeelden gezocht op internet, zoals bijvoorbeeld deze: https://stackoverflow.com...ray-in-url-for-restmethod, heb er al meerdere avonden op gepuzzeld maar krijg het niet werkend.

Kan iemand mij in de juiste richting sturen?

Beste antwoord (via thanx op 14-06-2023 18:18)


  • spone
  • Registratie: Mei 2002
  • Niet online
Waarschijnlijk moet je je filter URL-encoden.

En heel simpel gedacht: als je dubbele quotes (") rondom de hele Uri gebruikt kan je enkele quotes binnen je string gebruiken.

Dus iets als:
PowerShell:
1
2
3
4
$var = Invoke-RestMethod `
    -Uri "https://webservice.local/data/tabel?$filter=demostring ne 'test'" `
    -ContentType 'application/json' `
    -Headers $headers


Voor de mooi zou ik ook altijd de Method parameter meegeven.

[ Voor 44% gewijzigd door spone op 14-06-2023 17:51 ]

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Waarschijnlijk moet je je filter URL-encoden.

En heel simpel gedacht: als je dubbele quotes (") rondom de hele Uri gebruikt kan je enkele quotes binnen je string gebruiken.

Dus iets als:
PowerShell:
1
2
3
4
$var = Invoke-RestMethod `
    -Uri "https://webservice.local/data/tabel?$filter=demostring ne 'test'" `
    -ContentType 'application/json' `
    -Headers $headers


Voor de mooi zou ik ook altijd de Method parameter meegeven.

[ Voor 44% gewijzigd door spone op 14-06-2023 17:51 ]

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • thanx
  • Registratie: Oktober 2002
  • Laatst online: 20-02 14:17
En natuurlijk is het antwoord weer zo simpel....

Beetje verder rommelen en het werkt idd als ik de quotes voor het filter url encode

$var = Invoke-RestMethod -Uri 'https://webservice.local/data/tabel?$filter=demostring%20ne%20%27test%27' -ContentType 'application/json' -Headers $headers

Bedankt!!

Acties:
  • +1 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Dat hoef je trouwens niet met de hand te doen he:

PowerShell:
1
$encoded = [System.Web.HttpUtility]::UrlEncode("tekst")

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • thanx
  • Registratie: Oktober 2002
  • Laatst online: 20-02 14:17
Tja, was meer even om er zeker van te zijn dat het probleem niet ergens anders zit. Foutenoorzaak uitsluiten. Maar je hebt gelijk, in de uiteindelijke code doe ik het ook zo ;)