WebHU - Programozási kérdések és válaszok

Hogyan lehet 2 karakter között mindent kivonni a JSON-válaszból?

A Jmeter 2.8 regex-jét használom, hogy kivonjak néhány értéket a JSON-válaszokból.

A válasz a következő:

{
    "key": "prod",
    "id": "p2301d",
    "objects": [{
            "id": "102955",
            "key": "member",
            ...
         }], 
    "features":"product_features"
}

Megpróbálok mindent, kivéve a [{....}] közötti szöveget egy reguláris kifejezéssel. Kipróbáltam ezt a "key":([^\[\{.*\}\],].+?) értéket, de a többi értéket mindig [{...}] között kapom (ebben a példában: tag)

Van valami ötlete?
Köszönöm.


  • milyen programozási nyelv? 10.01.2013
  • ehhez a jmeter regex kivonatot akarom használni 10.01.2013
  • Miért a regex? Ehhez használjon megfelelő JSON-elemzőt! 10.01.2013

Válaszok:


1

Tegyük fel, hogy megpróbálhat egyéni JSON segédprogramokat használni a jmeterhez (JSON Path Assertion, JSON Path Extractor , JSON Formatter) – JSON Path Extractor ebben az esetben.

  1. ATLANTBH jmeter-components hozzáadása a jmeterhez: https://github.com/ATLANTBH/jmeter-components#installation-instructions.
  2. Adja hozzá a JSON Path Extractort (a Post Processors összetevők listájából) gyermekként a mintavevőhöz, amely visszaadja a feldolgozni kívánt JSON-választ:

    ide írja be a kép leírását

    (A Dummy Sampler-t használtam a válasz emulálásához, meglesz az eredeti mintavevő)

    ide írja be a kép leírását

    Adjon hozzá annyi kivonatot, ahány értéket ki szeretne bontani (ebben az esetben 3: "kulcs", "azonosító", "szolgáltatások").

  3. Konfigurálja az egyes kivonatokat: adja meg a változó nevét a kibontott érték tárolásához, és JSONPath lekérdezést a megfelelő kibontásához érték:

    • for "key": $.key
    • az "azonosítóhoz": $.id
    • a "funkciókhoz": $.features
  4. A szkriptben a kivont értékekre hivatkozhat a jmeter változók használatával (a változó neve a JSON Path Extractor beállításaiban a „Név” mezőben látható): pl. ${jsonKey}, ${jsonID}, ${$.features}.

    ide írja be a kép leírását

Lehet, hogy nem ez a legoptimálisabb módszer, de működik.

10.01.2013
  • köszönöm válaszát, de van néhány probléma a Json path kivonat telepítésével. úgy tűnik, hogy egyes fájlok már nincsenek a tárban... Nem sikerült megtalálni az org.beanshell:bsh:jar:2.0b5 fájlt a canal-artifactory:8081/artifactory/repo gyorsítótárazott a helyi adattárban. 10.01.2013
  • Ez furcsa, mert több órával ezelőtt sikeresen letöltöttem a projektfájlokat és építettem üvegeket. Esetleg megpróbálhatod újra (bizonyosodj meg arról, hogy maven 3.x-et használsz) – vagy vigye el ide az archívumot a már megépített komponensekkel és függőségekkel: db.tt/2IQYA0l5. 11.01.2013
  • Végül egy BSF Post Processort használtam ehhez. Ehhez átalakítottam a json-válaszomat egy eval függvényt tartalmazó objektummá. Köszönöm a segítséget. 14.01.2013
  • Jó, hogy egyedül intézted el. Általában ugyanazt a megoldást használom is - mint a legerősebb (talán Beanshell PP a BSF helyett, de nem számít). 14.01.2013
  • @ALS , válaszba kellene írnod ​​a hozzászólásodat és elfogadnod. És talán pozitívan szavazz Alies Belik válaszára, mert hasznosnak tűnik :-) 14.01.2013

  • 2

    A problémámra az volt a megoldás, hogy a JSON-t objektummá alakítottam, hogy csak azt az értéket tudjam kinyerni, amelyet akarok, és nem a {...} értékeit.

    Itt láthatod a kódomat:

    var JSON={"itemType":"prod","id":"p2301d","version":"10","tags":[{"itemType":"member","id":"p2301e"},{"itemType":"other","id":"prod10450"}],"multiPrice":null,"prices":null};
    
    //Transformation into an object: 
    obj = eval(JSON );
    
    //write in the Jmeter variable "itemtype", the content of obj.itemType:prod
    vars.put("itemtype", obj.itemType);
    

    További információ: http://www.havecomputerwillcode.com/blog/?p=500.

    14.01.2013

    3

    Általános megoldás: DEMO

    Regex: (\[{\n\s*(?:\s*"\w+"\s*:\s*[^,]+,)+\n\s*}\])

    Magyarázat, nem használod fel helyesen a kötelező szóközöket, minden sor előtt szóközök vannak, és ezeket ki kell használni az egyeztetés előtt, ezért nem igazán működik a regex. Nem kell kihagynod a { karaktert.

    10.01.2013
  • köszönöm, de hogyan tudod kivonni a sorokat, kivéve ami a [{...}]-ban van, szeretném az objektumok előtti és utáni szöveget beolvasni. key:prod, id:p2301d, features:product_features 10.01.2013
  • Tehát végül egyetlen karakterláncként szeretné megkapni a "key":"prod", "id":"p2301d", "features":"product_features" formátumban - vagy külön változókba kivonva a kulcs, id és jellemzők értékeit ennek megfelelően? 10.01.2013
  • jobb lesz, ha minden értéket külön-külön megkapok, de az a helyzet, hogy nem fogom tudni, hol lesznek az értékeim. például a metakulcs lehet a JSON-válasz első részében vagy az utolsó részben. 10.01.2013
  • @ALS, kérjük, nézze meg a fenti választ a JSON Path Extractor használatával. A megoldásnak meg kell felelnie az Ön forgatókönyvének. 10.01.2013
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..