String mit vielen Anführungszeichen komfortabel bearbeiten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag 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?
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag 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$)
Hygge
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag 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\"}"
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag 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.
Bild
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag 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?
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag 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

Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag 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
Bild
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: String mit vielen Anführungszeichen komfortabel bearbeiten

Beitrag von stab »

:allright: Vielen DanK
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Antworten