Я начал реализацию Microsoft Cognitive Services используя C ++. У меня есть массив строк C ++ (массив faceIds)
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"};
Затем я пытаюсь преобразовать массив строк (C ++) в json
строка.
JSONObject jsnobject = new JSONObject(10);
JSONArray jsonArray = jsnobject.getJSONArray(faceIds);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject explrObject = jsonArray.getJSONObject(i);
}
Но у меня проблема. Итак, мой вопрос, Как преобразовать строковый массив C ++ в JSON?
Заранее спасибо.
Это надежное кроссплатформенное решение для работы с JSON в C ++ https://github.com/nlohmann/json. Я уверен, что у Microsoft есть библиотека, привязанная к их собственной ОС. Примеры понятны.
Ваш вопрос не точно определяет ваш вклад и ожидаемый результат. Вы анализируете C ++ из файла? Я не могу сказать.
Если первый блок кода является автоматически сгенерированным входным файлом и всегда будет иметь этот шаблон пробелов, а JSON-эквивалент является вашим желаемым выводом, замените первую строку на «[\ n», а последнюю строку на «] / n», и вы сделанный.
Если вы не можете гарантировать шаблон пробела входного файла, то вам понадобится синтаксический анализатор C ++ для генерации AST (абстрактного дерева символов), по которому вы можете пройти, чтобы найти массив faceIds RHS (правая сторона), а затем выполнить то же самое, что показано ниже из этой коллекции AST.
Если вы просто хотите выполнить итерации в C ++ через faceIds, то следующий код должен создать желаемую строку JSON:
#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;
}
Если вам нужно представление объекта какой-либо библиотеки, вам нужно будет определить, какую библиотеку вы используете, чтобы мы могли просмотреть ее API. Какую бы библиотеку вы не использовали, вы всегда можете просто запустить любой метод синтаксического анализа, который есть в ostr.str () выше, но мы могли бы найти более эффективный метод для создания эквивалентного дерева JSON, если вы определили библиотеку JSON. Невозможно однозначно идентифицировать библиотеку по имени объекта, например JSONObject, которое является именем класса, используемого в десятках библиотек.