JSON parsen
-
Hallo Leute,
ich suche eine gute Bibliothek für das parsen von JSON. Ich habe mir nun bei github Jsoncpp runtergeladen(https://github.com/open-source-parsers/jsoncpp) und bekomme einen Fehler (lib_json.lib konnte nicht gestartet werden). Habe im Ordner makefiles beide sln ausgeführt in beiden Ordnern. Benutze dafür VisualStudio2013 Gibt es für diese simple Sache nicht einfach eine Header und eine CPP datei, die einfach einen JSon string parst, muss man jede einfach scheisse so komplex verpacken ?
Vielen Dank für eure Hilfe
-
boost property_tree
die ist praktisch einfach nur: daten laden und baum draus generieren.
Die Doku hat auch ein kurzes Tutorial.
-
Müssen solche Kraftausdrücke wirklich sein? Wenn Du nicht verstehst, wie eine lib in C++ funktioniert, dann solltest Du nicht darüber schimpfen.
-
tntnet schrieb:
Müssen solche Kraftausdrücke wirklich sein? Wenn Du nicht verstehst, wie eine lib in C++ funktioniert, dann solltest Du nicht darüber schimpfen.
Aber ich muss zugeben, dass ich ihm manchmal schon zustimmen muss. Ich habe auch nicht immer Lust 3 Tage Dokumentationen zu lesen um eine Library langsam vernünftig nutzen zu können. Viel besser noch, wenn die Dokumentation dürftig ist.
Erst recht nicht, wenn die Aufgabe, die sie erledigen soll, eine einfache ist.
Hier weiß ich es natürlich nicht, weil ich mir die libs nicht angesehen habe.EDIT: Ich bin schneller in Qt reingekommen als in so manche kleine Library.
-
@Tim06TR
Wollte auch erst sowas in die Richtung schreiben.
Aber...
Er will ne .lib starten, und weiss nicht was dabei das Problem ist.
Was soll man dazu noch sagen?
-
hustbaer schrieb:
@Tim06TR
Er will ne .lib starten, und weiss nicht was dabei das Problem ist.
Was soll man dazu noch sagen?Jetzt habe ich mir den Post nochmal richtig durchgelesen und gemerkt, was ihr meint...
...Naja boost property_tree ist glaube ich header only.
@OP: Dir fehlen Grundlagen bezüglich Linker und bauen von libs.
EDIT: *hier nochmal von *nix package manager systemen schwärm*
-
@Tim06TR:
Hat doch nichts mit *nix-Paketmanagern zu tun, wenn du kurz 'ne Library kompilieren willst. Eher damit, dass Windows als Entwicklungsumgebung lutscht, weil so Sachen wie Make fehlen und die Konsole übel ist.
Unter *nix machst du./configure --disable-static --enable-shared && make, und dann hast du die Bibliothek und kannst sie entweder manuell einbinden (LD_LIBRARY_PATH oder die a/o-Datei(en) beim Kompilieren angeben) oder mit make install in deinen /usr/local-Ordner kopieren lassen. Aber das ist alles außerhalb der Paketverwaltung, die SOLL da ja auch nicht zwischenfunken. Deswegen werden Distributionslibs auch in /usr und /usr/lib geschrieben, und eigens Kompiliertes kommt nach/optoder/usr/local.Habe ich oft genug machen müssen, weil Gentoo halt nicht immer die neusten Pakete hat, aber ich trotzdem gerne neuere Programme hätte. Um da keine Probleme hervorzurufen, wird das selbst kompiliert und dann in die oben beschriebenen Verzeichnisse kopiert. Der Paketmanager hat da gar nichts mit zu tun.
Erinnere mich auch, dass ich damals, als ich noch mit C++ gearbeitet habe, Probleme hatte, Boost kompiliert zu bekommen auf Windows. Unter Debian war das sowas von kein Problem. Was soll man da noch sagen?
-
EDIT: DELETE
-
dachschaden schrieb:
@Tim06TR:
Hat doch nichts mit *nix-Paketmanagern zu tun, wenn du kurz 'ne Library kompilieren willst. Eher damit, dass Windows als Entwicklungsumgebung lutscht, weil so Sachen wie Make fehlen und die Konsole übel ist.
Unter *nix machst du./configure --disable-static --enable-shared && make, und dann hast du die Bibliothek und kannst sie entweder manuell einbinden (LD_LIBRARY_PATH oder die a/o-Datei(en) beim Kompilieren angeben) oder mit make install in deinen /usr/local-Ordner kopieren lassen. Aber das ist alles außerhalb der Paketverwaltung, die SOLL da ja auch nicht zwischenfunken. Deswegen werden Distributionslibs auch in /usr und /usr/lib geschrieben, und eigens Kompiliertes kommt nach/optoder/usr/local.Habe ich oft genug machen müssen, weil Gentoo halt nicht immer die neusten Pakete hat, aber ich trotzdem gerne neuere Programme hätte. Um da keine Probleme hervorzurufen, wird das selbst kompiliert und dann in die oben beschriebenen Verzeichnisse kopiert. Der Paketmanager hat da gar nichts mit zu tun.
Erinnere mich auch, dass ich damals, als ich noch mit C++ gearbeitet habe, Probleme hatte, Boost kompiliert zu bekommen auf Windows. Unter Debian war das sowas von kein Problem. Was soll man da noch sagen?Ich verwende Arch. Das sind die libs alle brandneu und das user repo hat auch ein haufen builds für git devel(opment) branches. Sowas wie uralt (das nennt man dann "stable") Debian tu ich mir nicht an. Ich baue natürlich auch Sachen selbst, die einfach nicht im Repo sind. Aber die bekanntesten Libs sind alle im Repo und installiere ich einfach nur noch.
Warum sollte ich das noch selbst bauen?EDIT: und das tägliche youart -Syu updated mir auch gleich alle libs.
Da brauche ich kein manuelles git pull + [...] + make mehr für alle libs. Das machen andere für mich.EDIT: Nein nuget ist KEINE Alternative. Etwas dass für jedes Projekt Kopien anlegt für gezogenen Libraries kann ich einfach nicht ernstnehmen.
Ich kenne auch genug Libraries die VC Projektdateien beilegen, die veraltet sind und sich mit neueren VC Versionen schon lange nicht mehr bauen lassen. Ansonsten ist das natürlich auch eine sehr einfache Methode zum bauen von libs. Öffnen, Bauen, rauskopieren -> Fertig
Msys2 benutze ich seit neustem, da die für mich auch die wichtigsten libs bauen. Cmake Projekte kriegt man auch in den meisten Fällen noch gut gebaut, die machen ja auch alles selbst.
-
Tim06TR schrieb:
Ich verwende Arch. Das sind die libs alle brandneu und das user repo hat auch ein haufen builds für git devel(opment) branches. Sowas wie uralt (das nennt man dann "stable") Debian tu ich mir nicht an. Ich baue natürlich auch Sachen selbst, die einfach nicht im Repo sind.
Ich inzwischen auch nicht mehr.
Hatte damals ein Debian installiert, bei dem der i965-Treiber nicht mit dem Haswell-Chip konnte, und deswegen einen schlechteren ausgewählt hat, der aber wenigstens tut. Nur war der so scheiße, dass ein einfaches Video im VLC 200% Prozessorauslastung verursacht hat ...
Tim06TR schrieb:
Aber die bekanntesten Libs sind alle im Repo und installiere ich einfach nur noch.
Warum sollte ich das noch selbst bauen?Weil ich gerne auch mal an Libs rumhacke, wo die Entwickler zu ... naja, blöd sind, um dafür mal einen Fix einzubauen.
Beispiel: neues Headset mit USB-Soundkarte und einen Emulator mit Fast-Forward. Explizit eingestellt, dass kein Sound abgespielt werden soll, wenn Fast-Forward aktiv ist. Es wurde allerdings dann doch Sound abgespielt, und die USB-Karte lief ständig in Underruns, sodass Fast-Forward effektiv langsamer war.
Lösung: Fix im Quellcode, dass kein Sound abgespielt werden soll. Fix eingeschickt, und nie wieder was von den Typen gehört. Wurde bis heute nicht gefixt meines Wissens.
Bei jeder neuen Version muss ich den Code dann anfassen.Klar, kann ich auch auf Arch haben. Aber manchmal will ich auch Systemlibs debuggen, wo so ganz merkwürdige Fehler auftauchen. Als ich VDPAU ans Laufen bringen wollte und das Initialisierungs-API immer nur einen Fehlercode ohne Erklärung geschmissen hat (ich liebe das, wenn sonst keine Fehler angegeben werden). Unter Gentoo konnte ich dann sehr leicht debuggen und feststellen, dass die Bibliothek meinen Chipsatz noch gar nicht kannte. Einen Monat später war das Paket dann aktualisiert, und dann funzte das API auch und ich konnte endlich mal ffmpeg ordentlich nutzen.
Aber das ist jedenfalls alles sehr Off-Topic.
Klar ist jedenfalls, dass das alles immer noch Größenordnungen besser ist, als sowas auf Windows abzuziehen.
-
Ich habe noch nicht sooo viel unter Linux entwickelt, obwohl ich Linux seit ca 13 Jahre kenne. Allerdings ist das Nachinstallieren unter Linux und das Kompilieren der nötigen abhängigen Libs fast ein Kinderspiel und genau das ist die Gefahr für das Lernen. Um zu verstehen wie was funktioniert, muss ich viele Fehler machen und die auch selbst beheben lernen. Das klappt unter Windows, allerdings ohne vorgekauten VisualStudio-Projekte, viel besser. Durch MinGW + Msys habe ich aber genauso ein make, bash und den ganzen Kommandovielfalt wie unter Linux und ich kann die ganzen Shell auch für die tägliche Arbeit unter Windows wunderbar nutzen. Man ist ja unter Windows, dank Cygwin, überhaupt nicht auf CMD und PowerShell angewiesen, wenn man dies nicht will.
Ich muss aber zugeben, dass ich das ein oder anderen Projekt erst gar nicht richtig angefangen habe, weil ich bestimmte Libs nicht unter den drei großen Systeme(OSX, Windows, Linux) zum Laufen gebracht habe. Falsche Schalter, Pfade, verschiedene Versionen etc. haben mich auch schon zur Weißglut getrieben. Ich habe dann auch des öfteren Mal komplett mit C++ aufgehört, weil ich einfach keine Lust mehr auf das Theater hatte.
Mittlerweile wird mit Qt schon recht viel abgedeckt, da brauche ich selten was Externes und es läuft überall, na jedenfalls unter OSX und Windows. Linux hat nie länger als ein paar Wochen im Dualboot bei mir überlebt, irgendwas hat mich am Ende immer richtig angekotzt, auf dem Rootserver und als Android ist es aber toll.
-
Tim06TR schrieb:
tntnet schrieb:
Müssen solche Kraftausdrücke wirklich sein? Wenn Du nicht verstehst, wie eine lib in C++ funktioniert, dann solltest Du nicht darüber schimpfen.
Aber ich muss zugeben, dass ich ihm manchmal schon zustimmen muss. Ich habe auch nicht immer Lust 3 Tage Dokumentationen zu lesen um eine Library langsam vernünftig nutzen zu können. Viel besser noch, wenn die Dokumentation dürftig ist.
Erst recht nicht, wenn die Aufgabe, die sie erledigen soll, eine einfache ist.
Hier weiß ich es natürlich nicht, weil ich mir die libs nicht angesehen habe.EDIT: Ich bin schneller in Qt reingekommen als in so manche kleine Library.
Wo ist das Problem? Wieso musst Du 3 Tage Dokumentationen lesen um eine Library zu nutzen? Das ist doch nicht so schwer.
Zunächst muss man die Library installieren. Das geht idealerweise über ein einfaches Kommando für den Paketmanager. Der wurde hier ja schon ausreichend gewürdigt. Leider gibt es genau ein Betriebssystem, welches meint, ohne auskommen zu müssen. Da muss ich die Library irgendwo sinnvoll unterbringen. Oder man compiliert sie aus den Sourcen. Ein "./configure && make && sudo make install" genügt häufig. Oder einfach mal in die mitgelieferte Installationsanweisung schauen.
Eine C++ Library besteht aus Headern und einer oder mehreren libs. Die Header werden in der Regel nach der Installation automatisch gefunden (ich schliesse mal dieses eine Betriebssystem aus, welches keinen Paketmanager und kein Konzept hat, wo man Includes und Libraries unterbringt). Die Lib genau so. Ich muss sie einfach nur mit dem Flag -l an den Compiler (das ist sogar unter allen mir bekannten Compilern einheitlich) gelinkt werden.
Eine andere Sache ist, wenn die Library eine komplizierte API hat. Aber das ist immer so bei Software und beschränkt sich nicht auf Libraries oder gar nur auf C++-Libraries. Entweder ist der Sachverhalt so kompliziert und erfordert eine komplizierte API oder aber die Library ist schlecht designt. Das ist aber auch nicht spezifisch für C++. Komplizierte Software gibt es auf jeder Ebene.
So, und jetzt sag mal, wo Du ihm zustimmen musst? Ich kann ihm höchstens attestieren, die falsche Betriebssystemwahl getroffen zu haben. Aber das gilt leider für den Großteil der Computernutzer.
-
tntnet schrieb:
Ich kann ihm höchstens attestieren, die falsche Betriebssystemwahl getroffen zu haben. Aber das gilt leider für den Großteil der Computernutzer.
Genau Windows ist auch die total falsche OS-Wahl. Es wird nur genutzt weil die Mehrheit aus DAUs besteht. Das muss der Grund sein und nicht etwa weil viele Linux auf dem Desktop einfach zum brechen finden.

Ich persönlich habe OSX und Windows und arbeite viel lieber unter Windows. Linux teste ich jedes Jahr auf Desktoptauglichkeit und jedes Jahr stecke ich mir nach kurzer Zeit wieder den Finger in den Hals. Die Shell + Paketmanager sind geil, alles was mit Desktop zu tun hat, ist einfach ein schrecklicher Brei, den zich Köche schon umgerührt haben. Wer sich so etwas freiwillig rein zieht ist wirklich schmerzbefreit und hat meinen vollen Respekt.
Sorry für so viel Offtopic, aber bei indirekten Linux-Empfehlungen hört wirklich der Spaß auf.
-
Sorry für Ot:
Citizen42 schrieb:
tntnet schrieb:
Ich kann ihm höchstens attestieren, die falsche Betriebssystemwahl getroffen zu haben. Aber das gilt leider für den Großteil der Computernutzer.
Genau Windows ist auch die total falsche OS-Wahl. Es wird nur genutzt weil die Mehrheit aus DAUs besteht. Das muss der Grund sein und nicht etwa weil viele Linux auf dem Desktop einfach zum brechen finden.

Du hast es erfasst.
Ich persönlich habe OSX und Windows und arbeite viel lieber unter Windows. Linux teste ich jedes Jahr auf Desktoptauglichkeit und jedes Jahr stecke ich mir nach kurzer Zeit wieder den Finger in den Hals. Die Shell + Paketmanager sind geil, alles was mit Desktop zu tun hat, ist einfach ein schrecklicher Brei, den zich Köche schon umgerührt haben. Wer sich so etwas freiwillig rein zieht ist wirklich schmerzbefreit und hat meinen vollen Respekt.
Von welchen Desktops redest du? Ich persönlich bin mit Ubuntu/Unity zufriedener als mit Windows*: Native Multidesktops, Firefox Desktop Notifications funktioniert wesentlich besser, man kann jeden Scheiß einstellen, etc.
*Gut, Windows 10 ist geil, wird eine Konkurrenz werden, wenns fertig ist.
-
Ich habe persönlich damals mit Suse 7.3 angefangen und von Ubuntu kenne ich alle Versionen seit 6.06. Immer hatte ich die Hoffnung, irgendwann weg von dem "bösen" Windows zu kommen. Letztendlich blieb es immer als Dualboot drauf und ich war schnell dabei, Daten zwischen diesen beiden Versionen hin und her zu schubsen. Wenn ich dann mal ein der Systeme neu installieren wollte, war das auch immer irgendwie ein Kraftakt. Letztendlich habe ich gemerkt, dass ich Windows doch immer brauche, sei es zum Testen ob meine Software läuft, oder um einfach mal eine Runde zu zocken(freu mich schon auf Elite Dangerous). Jetzt habe ich mittlerweile einen neuen DesktopPC mit UEFI und die letzten Linux Installationen mit Dualboot und Windows8.1 waren schon sehr nervig und jedes mal war ich dann nach ein paar Wochen des Einrichtens und Testens froh wenn alles wieder von der Platte war und ich Windows only drauf hatte. Mein Mac würde auch mit Windows-only laufen, wenn es besser das Touchpad, so wie unter OSX, unterstützen würde. Ich hasse den Finder und die Tastaturbeleung unter OSX und das OSX ständig meine USB-Datenträger mit irgendwelche ._DS_Store und sonst was vollplastert. Nett ist das eine Unixshell immer da ist, aber das kann ich mit Cygwin auch unter Windows ganz schnell haben.
Unter dem Strich kommt bei mir Windows, von der Bedienung, an aller erster Stelle, dann kommt OSX und ganz weit unter dann leider erst Linux. Ich warte seit vielen vielen Jahren auf eine Version die Windows und OSX in die ewigen Jagdgründe schicken kann. Aber ich habe das Gefühl, dass dies noch locker 10 Jahre dauern kann.
Ich bin auch kein Fanboy einer gewissen Richtung, mir ist es egal ob was kommerziell ist oder nicht, oder ob die NSA da mit ließt. Ich will mit dem System so gut es geht arbeiten und das kann ich derzeit mit Windows am allerbesten. Alle anderen Systeme sind mit Einschränkungen verbunden, die ich nicht hinnehmen möchte. Ich habe einfach keine Lust mehr zu basteln und das musste ich bis jetzt an irgendeiner Stell immer und teils für ganz essentielle Dinge(Bluetooth bleibt nicht ausgeschaltet, Energiemanagment, Bluray etc.)
Auf meinem Rootserver läuft seit Jahren Debian und man merkt, dass es dafür wie gemacht ist. Die einzige GUI die mit Linux gut funktioniert, ist in meinen Augen Android, die haben alles richtig gemacht. Eine Firma, ein Desktop und das eisern in wenigen Jahren zum Massenerfolg hochgezogen. Genau so etwas bräuchte es für den Linux-Desktop auf dem PC. Das Konzept der Vielfältigkeit und jeder darf mal in die Suppe spucken, geht beim Desktop irgendwie nicht auf.
-
komisch. ich spiele seit vielen Jahren windows spiele ohne windows.
-
otze schrieb:
komisch. ich spiele seit vielen Jahren windows spiele ohne windows.
Was sind den "Windows Spiele"?
-
tntnet schrieb:
Tim06TR schrieb:
...
Eine andere Sache ist, wenn die Library eine komplizierte API hat. Aber das ist immer so bei Software und beschränkt sich nicht auf Libraries oder gar nur auf C++-Libraries. Entweder ist der Sachverhalt so kompliziert und erfordert eine komplizierte API oder aber die Library ist schlecht designt. Das ist aber auch nicht spezifisch für C++. Komplizierte Software gibt es auf jeder Ebene.
Das meinte ich eigentlich. Ich hatte mir zunächst sein post nicht gründlich genug durchgelesen. Mir gings nicht ums bauen und linken.
-
otze schrieb:
komisch. ich spiele seit vielen Jahren windows spiele ohne windows.
Ach ja, wenn ich mir z.B. das neue Elite Dangerous kaufe, dann läuft das ohne Basteln unter Linux? Wenn ich Musik machen will, mit meinen VST-Instrumenten, dann läuft dies ohne Basteln unter Linux? Wenn ich meine YouTube Videos mit AfterEffects erstelle, dann läuft dieses Programme mit voller GPU Unterstützung und den Trapcode-Plugins auch ohne Basteln unter Linux?
Ich habe wirklich wirklich viel probiert unter Linux und manches ist ziemlich geil wie Blender, Libreoffice usw und manches für die Tonne wie Gimp(seit 2008 warte ich auf die vollständige GEGL-Intergration mit Einstellungs-/ebenen/stile, damit man endlich eine ernsthafte Alternative zum teuren Photoshop hat und es mit Photoshop 6.0 aus dem Jahre 2000 aufnehmen kann.
Und ja ich kenne Wine und Crossoveroffice. Ich habe wirklich viel und lange getestet, sonst könnte ich auch keine Kritik üben.
Es tut mir Leid, aber sobald man was in Richtung Multimedia machen will ist man mit Linux ziemlich verloren, oder muss mit ziemlich übler Software kämpfen. Das ist meine persönlich Meinung und ich habe es wirklich ernsthaft probiert und würde mich heute noch freuen wenn Linux mein Hauptsystem werden könnte.
EDIT: Ganz schlimm finde ich auch diese Tearing-Effekte, wenn man sich mal ein Video anschaut und FullHD im Browser bringt auch so manchen i5 zum stottern. Naja und Bluray brauche ich erst gar nicht mit anfangen. Man was habe ich mich da geärgert mit meinen neuen Bluray-Brenner und die ersten Scheiben.
-
Um mal auf´s Thema zurückzukommen:
JSONcpp kostet nichts, außer deine Zeit. Wenn du nicht durchsteigst, dann guck, ob es was Professionelles mit Support gibt.
Aber bitte beschwer´ dich nicht darüber, dass jemand sich zwar die Zeit genommen hat, eine Bibliothek zu entwickeln, aber nicht die Zeit, eine super Dokumentation mitzuliefern.
-
Tim06TR schrieb:
boost property_tree
die ist praktisch einfach nur: daten laden und baum draus generieren.
Die Doku hat auch ein kurzes Tutorial.Ein gern gemachter Fehler, aber völlig daneben, wenn es komplizierter als "Hello world" werden soll.
Für JSON gibt es das relativ brauchbare header-only https://github.com/miloyip/rapidjson.