Gelöst DotLiquid String extrahieren

Heinz Schrot

Gut bekanntes Mitglied
1. August 2009
231
7
Hallo,

ich erhalte folgenden String und benötige exakt nur den Wert des "access_token"s.
Code:
Pragma=no-cache
Content-Length=166
Cache-Control=no-store
Content-Type=application/json; charset=utf-8
Date=Tue, 10 Apr 2018 14:54:24 GMT
Set-Cookie=session_id=be201b62635d2838e1a9f06eb6791f4e0bad7192; Expires=Mon, 09-Jul-2018 14:54:24 GMT; Max-Age=7776000; HttpOnly; Path=/
Server=Werkzeug/0.11.15 Python/3.5.2

{"expires_in": "600", "uid": 1, "user_context": {"tz": "Europe/Berlin", "uid": 1, "lang": "en_US"}, "access_token": "QviNFDVGhpFqvCVsuk8UOBnoUj6Oeh", "company_id": 1}

Das benötige ich:
Code:
QviNFDVGhpFqvCVsuk8UOBnoUj6Oeh

Wie komme ich dahin? RegEx?
Hat jemand einen Tip?
Danke!
 

Heinz Schrot

Gut bekanntes Mitglied
1. August 2009
231
7
erledigt:
Code:
{% assign Positionen = (GlobaleTexte.REST.auth.Deutsch | Split: ',') %}
{% assign Artikel = Positionen | Map: 'access_token' %}
{% for artikel in Artikel %}
    {% if artikel contains 'access_token' %}
        {% assign token = (artikel | Remove: 'access_token' | Replace: ' ', '' | Replace:':','' | Replace:'"','' | Trim) %}             
    {% endif %}
{% endfor %}
{{ token | StripNewlines | Replace: ' ';''}}
 

holzpuppe

Sehr aktives Mitglied
14. Oktober 2011
1.709
252
Leipzig
Hallo ich versuche gerade das Gleiche. Bekomme das aber nicht hin.
Ich möchte den Wert der in Hersteller-Beschreibung steht. Und eigentlich NUR die erste Zeile in ein eigenes Feld schreiben lassen.

Der Wert ist folgender: <div id="LMHER" style="display: none">Adresse</div>

Code:
{% assign Popel = {{ Vorgang.Allgemein.Stammdaten.Hersteller.Beschreibung }} %}
{% assign Nase = Popel | Map: ' ' %}
{% for bohren in Nase %}
   {% if bohren contains 'LMHER' %}
       {% assign tatu = (bohren | Remove: '<div id="LMHER" style="display: none">' | Remove: '</div>' | Trim) %}             
   {% endif %}
{% endfor %}
{{ tatu | StripNewlines | Replace: '';''}} <-brauch ich das?

Leider macht er da nix und meckert nur.
Liquid error: Der Wert darf nicht NULL sein.
Parametername: input
Liquid error: Der Wert darf nicht NULL sein.
Parametername: source

Was mache ich falsch?
 

holzpuppe

Sehr aktives Mitglied
14. Oktober 2011
1.709
252
Leipzig
Gna...Hat sich erledigt.
Doch nicht so kompliziert wie gedacht. WF hat angemeckert dass die Sprache nicht definiert war. Interessanterweise hat folgendes funktioniert:
Code:
{{ Vorgang.Allgemein.Stammdaten.Hersteller.Beschreibung | First | StripHtml}}

Lasse ich "| First" weg, geht es nicht. (Fehlermeldung: Liquid error: Das Objekt mit dem Typ "jtlDatabase.Templates.Drops.MehrsprachigDropifier" kann nicht in den Typ "System.String" konvertiert werden.)
 

holzpuppe

Sehr aktives Mitglied
14. Oktober 2011
1.709
252
Leipzig
Oh. Danke. Das hat wohl gefehlt. Wobei die Ausgabe gerne sprachunabhängig sein darf.
Aber ich brauch der Einfachhalber die Ausgabe "nur erste Zeile", falls ich mal eine Beschreibung in der Zukunft einfügen werde, möchte ich nicht alles an der Stelle ausgeben.
Code:
{{ Vorgang.Allgemein.Stammdaten.Hersteller.Beschreibung | SelectLanguage: 'german' | First | StripHtml}}
mag er nicht.

Code:
{{ Vorgang.Allgemein.Stammdaten.Hersteller.Beschreibung | First | StripHtml}}
Würde mir das nicht auch auf Englisch ausgegeben werden?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
7.247
1.971
Berlin
Also das first müsste eigentlich ja weg bei dir. das First nimmt ja nicht die erste Zeile sondern den ersten Array Eintrag der ja normal "deutsch" wäre, daher passte das bei dir vermutlich grade.

Das was ich hier schreibe ist jetzt reines vermuten, wie ich mir vorstelle wie das sein sollte, da ich das so noch nicht aktiv verwendet habe.

Da du keinen Anhaltspunkt hast, wo die Zeile aufhört, wirst du das so nicht extrahieren können, du musst alles nehmen und dann kürzen oder hast einen Punkt nachdem du dich richten und splitten kannst.
 

holzpuppe

Sehr aktives Mitglied
14. Oktober 2011
1.709
252
Leipzig
Aha. Gut zu wissen. Danke.
Da ich jetzt noch nicht weiß, wie ich einmal die Herstellerbeschreibung zusätzlich nutzen werde, muss ich mich an den Wert "<div id="LMHER" style="display: none">Adresse</div>" halten. So sieht es quasi bei allen Herstellern aus. Allerdings weiß ich nicht, wie ich explizit danach suchen kann. Da der Inhalt der div unterschiedlich ist.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
7.247
1.971
Berlin
z.B. so:
Code:
{{ '<div id="LMHER" style="display: none">Adresse</div>' | Replace : "<.+LMHER.+?>(.+?)<\/div>" : "$1" }}

aber das ist jetzt ein sehr vereinfachtes Beispiel, wobei der erste Teil deine Variable wäre Vorgang.Allgemein.Stammdaten.Hersteller.Beschreibung | SelectLanguage: 'german'
 

holzpuppe

Sehr aktives Mitglied
14. Oktober 2011
1.709
252
Leipzig
Hey, Danke. Aber besagt das "Replace" nicht einfach, dass das Folgende entfernt wird, bzw. ersetzt?
Das kann ich ja einfachhalber mit "striphtml" lösen.

Was ich meinte:
In Herstellerbeschreibung steht:
PHP:
<div id="LMHER" style="display: none">Adresse</div>

und blabla oder
<div id="herstbesch">die ultimative Herstellerstory die so noch nie nicht nirgendwo so steht</div>
...
Ich brauch quasi nur "<div id="LMHER" style="display: none">Adresse</div>" in den eigenen Feldern, den Rest nicht an dieser Stelle. Der soll dann in der Herstellbeschreibung des Shops auftauchen.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
7.247
1.971
Berlin
Replace kann auch regex, daher könntest du das damit lösen, setzt aber voraus, dass sich in diesem Bereich kein weiteres </div> befindet wo jetzt Adresse steht.