String enthält Gänsefüßchen

OP #6707827
Lesenswert?

Hallo!

Ich möchte ein json mit C auswerten. Beispiel:

{"time":1622204790,"states":[["3c6668","DLH1TN 
","Germany",1622204790,1622204790,9.0302,46.6846,11582.4,false,213.88,35 
6.55,0,null,11864.34,"1000",false,0]}

Ich wollte das in ein entsprechend großes char array einlesen. Zu Recht 
wird das 2te " als das Ende des Strings interpretiert und es gibt eine 
Fehlermeldung.

Wie macht man das?
Gast #6707837
Lesenswert?

Attila C. schrieb:

> Ich wollte das in ein entsprechend großes char array einlesen. Zu Recht
> wird das 2te " als das Ende des Strings interpretiert und es gibt eine
> Fehlermeldung.
>
> Wie macht man das?

Du meinst vermutlich eigentlich nicht "einlesen", sondern dass du dieses 
char-Array mit einem String-Literal initialisieren möchtest, welches 
Anführungszeichen enthalten muss.

Da muss man "escapen". Es gibt mehrere Möglichkeiten, dies zu tun, die 
kürzeste ist: mache aus jedem " im String ein
1
\"
.

(Edit: [c]-Tag eingefügt, weil sonst der Backslash zumindest in der 
mobilen Darstellung nicht sichtbar ist. - Mod.)
Moderator Persönliche Seite #6707852
Lesenswert?

Attila C. schrieb:
> Es ist ein Json. Da ich jenes nicht selber schreibe sondern von einer
> API erhalte kann ich es nicht umschreiben.

Dann beschreibe mal exakt, was du tun willst.

Ist das C-Quellcode, der compiliert werden soll? Dann geht das einfach 
nicht.

Willst du das wirklich einlesen, also irgendwie mit fgets() oder 
dergleichen? Dann interessieren die Quotes erstmal gar nicht.
Gast #6707854
Lesenswert?

In viele IDEs kannst du mit einem leeren String anfangen und dieses JSON 
Dokument dann über die Zwischenablage einfügen:

char test[]="";

Anführungsstriche und Zeilenumbrüche werden dann von der IDE automatisch 
escaped.
Gast #6707877
Lesenswert?

Attila C. schrieb:
> Hallo!
>
> Ich möchte ein json mit C auswerten. Beispiel:
>
> {"time":1622204790,"states":[["3c6668","DLH1TN
> ","Germany",1622204790,1622204790,9.0302,46.6846,11582.4,false,213.88,35 
6.55,0,null,11864.34,"1000",false,0]}

Das mit dem escapen ist ja schon erklärt worden.

Aber soweit ich das sehe ist das Zeugs sowieso kaputt, weil der Wert von 
"states" (ein Array) mit zwei eckigen Klammern anfängt wo nur eine sein 
sollte.

Ich würde mir erstmal ein ordentliches API zur Lieferung dieser Daten 
suchen, sonst hat man nur begrenzt Spass damit...
Gast #6708015
Lesenswert?

Attila C. schrieb:
> Ich wollte das in ein entsprechend großes char array einlesen. Zu Recht
> wird das 2te " als das Ende des Strings interpretiert und es gibt eine
> Fehlermeldung.

Warum eigentlich zu Recht?

man kann doch mit fgets(...) alles einlesen. Auch z.B. Zeilen wie
1
/* auch das wird eingelesen */ "und" "das" "erst" "recht"
#6709463
Lesenswert?

Das JSON ist nicht valid... https://jsonlint.com/ kann man hier prüfen.

Dein Problem ist das Object States welchen ein Array enthält und dieses 
Array ein weiteres Array. Mehrdimensionale Arrays sind im JSON möglich, 
aber nicht so...


Alle Zeichen die in der c Funktion Verwendung finden müssen entwertet 
werden..

Andererseits müssen auch alle Zeichen die dein JSON zerstören ebenfalls 
beim ausgeben entwendet werden.
#6709665
Lesenswert?

Attila C. schrieb:
> Ich möchte ein json mit C auswerten. Beispiel:
>
> {"time":1622204790,"states":[["3c6668","DLH1TN
> ","Germany",1622204790,1622204790,9.0302,46.6846,11582.4,false,213.88,35
> 6.55,0,null,11864.34,"1000",false,0]}
>
> Ich wollte das in ein entsprechend großes char array einlesen. Zu Recht
> wird das 2te " als das Ende des Strings interpretiert und es gibt eine
> Fehlermeldung.
>
> Wie macht man das?

Hallo Attila,

die Auswertung von Json in C ist problemlos möglich.

Die Beschreibung deines Problems ist aber sehr schwer zu verstehen. Zum 
einen ist dein Json-Beispiel kein gültiges Json. Aber noch schwerer zu 
verstehen ist der zweite Teil, wo du sagst, dass das zweite 
Anführungszeichen als Ende des Strings interpretiert wird. 
Anführungszeichen werden in C zur Laufzeit nicht als Ende eines Strings 
interpretiert; sie werden im Quellcode für Anfang und Ende von 
String-Literalen benutzt und dann vom Compiler interpretiert.

Um dir helfen zu können solltest du dein Problem noch mal genauer 
beschreiben.

LG, Sebastian
OP #6709835
Lesenswert?

Also:

Das mit dem Json hat sich erledigt, ich habe so viele dämliche Fehler 
gemacht dass es mir zu peinlich ist sie hier zu beschreiben. Dennoch:

Wenn ich hier:

https://www.onlinegdb.com/online_c_compiler

Diesen Code eingebe:

#include <stdio.h>

char[20] = "abc"123"ABC"

int main()
{
    printf("Hello World");

    return 0;
}

Kommt:

Compilation failed due to following error(s).

 char[20] = "abc"123"ABC"
     ^
Beitrag #6709888 wurde von einem Moderator gelöscht.
Beitrag #6709892 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren