String enthält Gänsefüßchen

OP #6707827
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
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
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
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
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
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"
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.
Gast
Marco H. schrieb:
> Mehrdimensionale Arrays sind im JSON möglich, aber nicht so...

ähm wie meinen?
1
[[0]]
ist absolut valides json. beim beispiel im ersten beitrag ist ein array 
nicht geschlossen. ja, ist invalid aber weil das array nicht 
abgeschlossen ist...
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
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"
     ^
Gast
Attila C. schrieb:
> Hallo da und dort: Wie bewegt man das char array dazu die Gänsefüßchen
> innerhalb von Anfangs und End Gänsefüßchen einzulesen?

Das ist kein EINLESEN das nennt man Compilieren.

Das was du willst gibt die Syntax nicht her.
Beitrag #6709888 wurde von einem Moderator gelöscht.
Beitrag #6709892 wurde von einem Moderator gelöscht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.