2017-01-10 2 views
-3

Ich muss manuell, ohne externe Bibliotheken, eine JSON Nachricht von einem Server, in C language.Parse JSON-Nachricht manuell in C

Die Nachricht vom Server kommen würde wie:

{[CR+LF] 
"Tmg": "R",[CR+LF] 
"STP": 72[CR+LF] 
}[CR+LF] 

oder

{[CR+LF] 
"Tmg": "R",[CR+LF] 
"STP": 150[CR+LF] 
}[CR+LF] 

Ich brauche die Zahl nach STP:. Die Nummer ist in jeder Nachrichtenstruktur unterschiedlich, daher muss ich diese Nummer von der JSON-Struktur erhalten. Ich kann keine externen Bibliotheken verwenden, da sich dieser Code in einem eingebetteten System befindet und externer Code nicht erlaubt ist.

Ich habe versucht, dies folgende:

int main(){ 
    const char response_message[35] = "{\r\n\"Tmg\":\"R\",\r\n\"STP\":72,\r\n}"; 
    const char needle[8] = "P\":"; 
    char *ret; 

    ret = strstr(response_message, needle); 

    printf("The number is: %s\n", ret); 

return 0; 
} 

Aber natürlich, ich bin immer dieses Ergebnis:

The number is: P":72, 
} 

nur Also muss ich die Nummer bekommen, wie ich das bekommen kann?

Danke

+3

zu breit! Und Stack-Überlauf ist nicht meine Arbeit! Sie könnten 'strtok()' – Stargateur

+0

verwenden, um einige String-Muster zu definieren und spezifische Informationen aus diesem Muster zu erhalten. Bitte untersuchen Sie die Regex-Bibliotheken für die C-Sprache. – ffguven

Antwort

2

Sie können eine gehackte Lösung verwenden. Verwenden Sie strstr(), um "STP" zu finden: dann finden Sie die folgenden, oder} und extrahieren die Ziffern dazwischen.

Und das ist ein Hack. Nicht garantiert zu arbeiten. Für etwas, das garantiert funktioniert, verwenden Sie einen JSON-Parser.

+1

Die eigentliche Frage ist, wie die Nachricht generiert wird und welche Teile ihrer Struktur garantiert sind. Wenn es explizit auf diese Weise erzeugt wird und nicht durch die Verwendung von Strukturen auf hoher Ebene und einer JSON-Bibliothek (anders gesagt, wenn es nur * passiert *, um wie eine JSON-Nachricht auszusehen), ist dies kein Hack, sondern ein dedizierter Parser. –