2017-01-03 4 views
-1

Ich habe die Implementierung Microsoft Cognitive Services mit C++ gestartet. Ich habe ein C++ String Array (faceIds Array)Wie konvertiert man ein C++ String-Array in json?

string faceIds[] ={ 
      "29e874a8-a08f-491f-84e8-eac263d51fe1", 
      "6f89f38a-2411-4f6c-91b5-15eb72c17c22", 
      "7284b730-6dd7-47a3-aed3-5dadaef75d76", 
      "1fc794fa-3fd4-4a78-af11-8f36c4cbf14c", 
      "3e57afca-bd1d-402e-9f96-2cae8dbdfbfa", 
      "c2a4e0f5-4277-4f5a-ae28-501085b05209", 
      "23b5910e-9c32-46dd-95f3-bc0434dff641" 
    }; 

Dann versuche ich, String-Array (C++) zu json Zeichenfolge zu konvertieren.

JSONObject jsnobject = new JSONObject(10); 
JSONArray jsonArray = jsnobject.getJSONArray(faceIds); 
    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject explrObject = jsonArray.getJSONObject(i); 
} 

Aber ich habe ein Problem. Also, meine Frage ist, Wie konvertiert man C++ String-Array zu Json?

Vielen Dank im Voraus.

+3

Werfen Sie einen Blick auf diese Bibliothek: https://github.com/nlohmann/json –

+1

Es ist Bibliothekszeit. Dies von Hand zu tun, kommt völlig außer Frage, Sie werden immer etwas katastrophal falsch bekommen. – tadman

+0

überprüfen Sie diese stackoverflow Antwort ... http://stackoverflow.com/questions/15609306/convert-string-to-json-array – Shobhit

Antwort

0

Dies ist eine robuste plattformübergreifende Lösung für die Arbeit mit JSON in C++ https://github.com/nlohmann/json. Ich bin sicher, dass Microsoft eine Bibliothek auch für ihr eigenes Betriebssystem gesperrt hat. Die Beispiele sind klar.

0

Ihre Frage identifiziert Ihre Eingabe und die erwartete Ausgabe nicht genau. Analysieren Sie das C++ aus einer Datei? Ich kann es nicht sagen.

Wenn der erste Codeblock eine automatisch generierte Eingabedatei ist und immer dieses Whitespace-Muster enthält und das JSON-Äquivalent die gewünschte Ausgabe ist, ersetzen Sie die erste Zeile durch "[\ n" und die letzte Zeile durch "]/n" und du bist fertig.

Wenn Sie das Leerraummuster der Eingabedatei nicht garantieren können, benötigen Sie einen C++ - Parser, um einen AST (abstrakten Symbolbaum) zu generieren, den Sie durchstreichen können, um das FaceIds-Array RHS (rechte Seite) zu finden. und machen Sie dann dasselbe wie unten in dieser AST-Sammlung gezeigt.

Wenn Sie einfach in C iterieren wollen ++ durch faceIds, dann sollte der folgende Code die gewünschten JSON-String erzeugen:

#include <iostream> 
#include <sstream> 

std::string faceIds[] = { 
    "29e874a8-a08f-491f-84e8-eac263d51fe1", 
    "6f89f38a-2411-4f6c-91b5-15eb72c17c22", 
    "7284b730-6dd7-47a3-aed3-5dadaef75d76", 
    "1fc794fa-3fd4-4a78-af11-8f36c4cbf14c", 
    "3e57afca-bd1d-402e-9f96-2cae8dbdfbfa", 
    "c2a4e0f5-4277-4f5a-ae28-501085b05209", 
    "23b5910e-9c32-46dd-95f3-bc0434dff641" 
}; 

int main() { 

    std::ostringstream ostr; 
    ostr << '[' << std::endl; 
    int last = std::extent<decltype(faceIds)>::value - 1; 
    int i = 0; 
    while (i < last) 
     ostr << " \"" << faceIds[i ++] << "\"," << std::endl; 
    ostr << " \"" << faceIds[i] << "\"" << std::endl; 
    ostr << ']' << std::endl; 

    std::cout << ostr.str(); 

    return 0; 
} 

Wenn Sie einige Bibliothek Darstellung Objekt wollen, dann werden Sie feststellen müssen, welche Bibliothek Sie verwenden, damit wir seine API überprüfen können. Egal, welche Bibliothek Sie verwenden, Sie können immer die Parse-Methode ausführen, die oben auf ostr.str() steht, aber wir könnten eine effizientere Methode finden, um die entsprechende JSON-Struktur zu erstellen, wenn Sie die JSON-Bibliothek identifiziert haben. Man kann die Bibliothek nicht eindeutig anhand eines Objektnamens wie JSONObject identifizieren, bei dem es sich um einen Klassennamen handelt, der in Dutzenden von Bibliotheken verwendet wird.

Verwandte Themen