Seite 1 von 1

String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 10:56
von stab
Hallo,

ich muss bei meinem HttpRequest über #PB_HTTP_Post z.B. folgenden String übergeben:

{"sipuid": "777c123456abc@blf.finotel.com","target": "01722233445"}

Das sieht dann in PB so aus:

Code: Alles auswählen

target$ =  Chr(34) + "target" + Chr(34) + ": " + Chr(34) + "01722233445" + Chr(34)
Debug target$

sipuid$ = Chr(34) + "sipuid" + Chr(34) + ": " + Chr(34) + "777c123456abc@blf.finotel.com" + Chr(34)
Debug sipuid$

dataraw$ = "{" + sipuid$ + "," + target$ + "}"
debug dataraw$
Funktioniert alles wunderbar, doch programmiertechnisch eine Katastrophe.

Gibt es irgendeine Möglichkeit, das anders zu lösen oder wie handhabt ihr das?

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 11:14
von Kiffi
Wenn Du eine Tilde (~) vor den String stellst, kannst Du Anführungsstriche mit einem Backslash (\) escapen:

Code: Alles auswählen

myString$ = ~"{\"sipuid\": \"777c123456abc@blf.finotel.com\",\"target\": \"01722233445\"}"
MessageRequester("", myString$)

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 11:27
von stab
Ja super, vielen Dank.

Das ist ja einszueins, was ich unter Windows Curl eingebe:

Curl .... --data-raw "{\"sipuid\": \"777c123456abc@blf.finotel.com\",\"target\": \"01722233445\"}"

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 12:20
von NicTheQuick
Der Vollständigkeit halber hier noch eine Version mit der JSON-Library von Purebasic:

Code: Alles auswählen

Structure SIPData
	sipuid.s
	target.s
EndStructure

Define var1.SIPData
var1\sipuid = "777c123456abc@blf.finotel.com"
var1\target = "01722233445"

If CreateJSON(0)
	InsertJSONStructure(JSONValue(0), var1, SIPData)
	Debug ComposeJSON(0, #PB_JSON_PrettyPrint)
EndIf
Natürlich ist der Code so noch komplexer, aber sollte deine Struktur ebenfalls komplexer werden, könnte diese Art es für dich in Zukunft einfacher machen, weil sich automatisch um jedwedes Escaping gekümmert wird.

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 12:57
von stab
Das ist auf jeden Fall hilfreich, danke.
Bin nämlich gerade dabei, mich mit der JSON Bibliothek zu befassen

und muss Rückgaben wie diese

Code: Alles auswählen

 {
        "id": 18123,
        "name": "Empfang1",
        "description": "Mitarbeiterin 1",
        "extension_sip": "777abcd1111@blf.finotel.com",
        "extension_pstn": "",
        "extension_type": "SIP",
        "agent_type": "Agent",
        "status": "online",
        "priority": 0,
        "last_call_at": "2022-06-28T11:27:16.000+02:00",
        "created_at": "2018-04-24T10:46:12.000+02:00",
        "updated_at": "2022-06-28T11:39:04.000+02:00"
    },
    {
        "id": 18124,
        "name": "Empfang2",
        "description": "Mitarbeiterin 2",
        "extension_sip": "777abcd2222@blf.finotel.com",
        "extension_pstn": "",
        "extension_type": "SIP",
        "agent_type": "Agent",
        "status": "online",
        "priority": 0,
        "last_call_at": "2022-06-28T11:11:05.000+02:00",
        "created_at": "2018-04-24T10:46:45.000+02:00",
        "updated_at": "2022-06-28T11:34:09.000+02:00"
    },
    {
        "id": 18125,
        "name": "Empfang3",
        "description": "Mitarbeiterin 3",
        "extension_sip": "777abcd3333@blf.finotel.com",
        "extension_pstn": "",
        "extension_type": "SIP",
        "agent_type": "Agent",
        "status": "dail_out",
        "priority": 0,
        "last_call_at": "2022-06-28T11:00:57.000+02:00",
        "created_at": "2018-04-24T10:45:31.000+02:00",
        "updated_at": "2022-06-28T11:38:52.000+02:00"
    }
auswerten und auch wieder senden.

Unter PB erhalte ich nach meinem Request

Code: Alles auswählen

InitNetwork()
NewMap Header$()
Header$("Authorization") = "Bearer 842f30840ae945b193e03643e4be407bb9ce10095f251bffab94783377f56unddertokennimmtkeinende"
HttpRequest = HTTPRequest(#PB_HTTP_Get, "https://api.placetel.de/v2/call_center_agents", "", 0, Header$())
If HttpRequest
    Debug "Statuscode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
    Debug "GET-Ergebnis: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
    Debug "Headers: " + HTTPInfo(HTTPRequest, #PB_HTTP_Headers)
FinishHTTP(HTTPRequest)
  Else
    Debug "Request creation failed"
  EndIf
folgenden String:

Code: Alles auswählen

GET-Ergebnis:
[{"id":18123,"name":"Empfang1","description":"Mitarbeiterin 1","extension_sip":"777abcd1111@blf.finotel.com","extension_pstn":"","extension_type":"SIP","agent_type":"Agent","status":"online","priority":0,"last_call_at":"2022-06-28T11:00:57.000+02:00","created_at":"2018-04-24T10:45:31.000+02:00","updated_at":"2022-06-28T11:55:26.000+02:00"},{"id":18124,"name":"Empfang2","description":"Mitarbeiterin 2","extension_sip":"777abcd2222@blf.finotel.com","extension_pstn":"","extension_type":"SIP","agent_type":"Agent","status":"online","priority":0,"last_call_at":"2022-06-28T11:27:16.000+02:00","created_at":"2018-04-24T10:46:12.000+02:00","updated_at":"2022-06-28T12:01:27.000+02:00"},{"id":18125,"name":"Empfang3","description":"Mitarbeiterin 3","extension_sip":"777abcd3333@blf.finotel.com","extension_pstn":"","extension_type":"SIP","agent_type":"Agent","status":"online","priority":0,"last_call_at":"2022-06-28T11:11:05.000+02:00","created_at":"2018-04-24T10:46:45.000+02:00","updated_at":"2022-06-28T12:09:47.000+02:00"}]
Das möchte ich jetzt im JSON Format haben.

Gibt es dazu evtl. schon irgendein Gerüst, was ich mir abgucken kann?

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 13:16
von stab
HttpRequest funktioniert übrigens super gut und einfach.

Schwuppdiewupp kann ich mein Telefon ansteuern und lasse es rauswählen.

Code: Alles auswählen

;  hier der entsprechende CURL Befehl
;  curl --location --request POST "https://api.placetel.de/v2/calls" --header "Content-Type: application/json" --header "Authorization: Bearer 7299aaea975522a6c19ee4ed21a02c701140587e5586c16b8c6unddertokennimmtkeinende" --data-raw "{\"sipuid\": \"777abcd1234@blf.finotel.com\",\"target\": \"08003301000\"}"


; hier die PB Übersetzung, z.Zt. noch mittels chr(34)
InitNetwork()

target$ =  Chr(34) + "target" + Chr(34) + ": " + Chr(34) + "08003301000" + Chr(34)
Debug target$

sipuid$ = Chr(34) + "sipuid" + Chr(34) + ": " + Chr(34) + "777abcd1234@blf.finotel.com" + Chr(34)
Debug sipuid$

dataraw$ = "{" + sipuid$ + "," + target$ + "}"

NewMap Header$()
Header$("Content-Type") = "application/json"
Header$("Authorization") = "Bearer 7299aaea975522a6c19ee4ed21a02c701140587e5586c16b8c6unddertokennimmtkeinende"
    
HttpRequest = HTTPRequest(#PB_HTTP_Post, "https://api.placetel.de/v2/calls", dataraw$, 0, Header$())
  If HttpRequest
    Debug "Statuscode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
    Debug "GET-Ergebnis: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
    Debug "Headers: " + HTTPInfo(HTTPRequest, #PB_HTTP_Headers)
    
    FinishHTTP(HTTPRequest)
  Else
    Debug "Request creation failed"
  EndIf


Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 13:54
von NicTheQuick
Hier siehst du wie es funktionieren kann:

Code: Alles auswählen

s.s = ~"[{\"id\":18123,\"name\":\"Empfang1\",\"description\":\"Mitarbeiterin 1\",\"extension_sip\":\"777abcd1111@blf.finotel.com\",\"extension_pstn\":\"\",\"extension_type\":\"SIP\",\"agent_type\":\"Agent\",\"status\":\"online\",\"priority\":0,\"last_call_at\":\"2022-06-28T11:00:57.000+02:00\",\"created_at\":\"2018-04-24T10:45:31.000+02:00\",\"updated_at\":\"2022-06-28T11:55:26.000+02:00\"},{\"id\":18124,\"name\":\"Empfang2\",\"description\":\"Mitarbeiterin 2\",\"extension_sip\":\"777abcd2222@blf.finotel.com\",\"extension_pstn\":\"\",\"extension_type\":\"SIP\",\"agent_type\":\"Agent\",\"status\":\"online\",\"priority\":0,\"last_call_at\":\"2022-06-28T11:27:16.000+02:00\",\"created_at\":\"2018-04-24T10:46:12.000+02:00\",\"updated_at\":\"2022-06-28T12:01:27.000+02:00\"},{\"id\":18125,\"name\":\"Empfang3\",\"description\":\"Mitarbeiterin 3\",\"extension_sip\":\"777abcd3333@blf.finotel.com\",\"extension_pstn\":\"\",\"extension_type\":\"SIP\",\"agent_type\":\"Agent\",\"status\":\"online\",\"priority\":0,\"last_call_at\":\"2022-06-28T11:11:05.000+02:00\",\"created_at\":\"2018-04-24T10:46:45.000+02:00\",\"updated_at\":\"2022-06-28T12:09:47.000+02:00\"}]"

Structure CallCenterAgent
	id.i
	name.s
	description.s
	extension_sip.s
	extension_pstn.s
	extension_type.s
	agent_type.s
	status.s
	priority.i
	last_call_at.s
	created_at.s
	updated_at.s
EndStructure

NewList agents.CallCenterAgent()

If ParseJSON(0, s)
	Debug ComposeJSON(0, #PB_JSON_PrettyPrint)
    Debug ExtractJSONList(JSONValue(0), agents())
EndIf

ForEach agents()
	Debug agents()\id
	Debug agents()\name
Next

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Verfasst: 28.06.2022 14:45
von stab
:allright: Vielen DanK