как мне сопоставить шаблон с объектом quickjson?

0

код:

int main()
{
        char buff[BUFSIZ];
        FILE *fp = popen("/usr/bin/php getSome.php 155", "r");
        FileReadStream s(fp, buff, BUFSIZ);
        Document a;
        a.ParseStream(s);
        \\for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
            \\printf("%d ", itr->GetInt());
        printf(a[1]);

}

У меня есть данные json, которые выглядят так:

./phpMethod1.o
success:1
orderid:192877561
moreinfo:Your Buy order has been placed for<br><b>0.00100000 DRK @ 0.00517290 BTC</b> each.<br>Order ID: <b>192877561</b>

Я пытаюсь получить ключевое значение для "orderid".

Я пробовал почти каждый метод отсюда → руководство пользователя quickjson для доступа к входящим json-данным и всегда получаю ошибку конверсии того же типа.

# g++ -g phpBuyMethod1.cpp -o phpBuyMethod1.o -std=gnu++11
phpBuyMethod1.cpp: In function 'int main()':
phpBuyMethod1.cpp:27:13: error: cannot convert 'rapidjson::GenericValue<rapidjson::UTF8<> >' to 'const char*' for argument '1' to 'int printf(const char*, ...)'

или если я пытаюсь использовать цикл for, например:

for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
    printf("%d ", itr->GetInt());

Код будет скомпилирован, но я получаю следующую ошибку при выполнении (в основном, удушье на одном и том же):

phpBuyMethod1.o: rapidjson/include/rapidjson/document.h:1167: rapidjson::GenericValue<Encoding, Allocator>* rapidjson::GenericValue<Encoding, Allocator>::Begin() [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::GenericValue<Encoding, Allocator>::ValueIterator = rapidjson::GenericValue<rapidjson::UTF8<> >*; rapidjson::GenericValue<Encoding, Allocator> = rapidjson::GenericValue<rapidjson::UTF8<> >]: Assertion 'IsArray()' failed.

Мораль, я просто не могу добраться до данных для соответствия шаблону. Как я должен правильно получить доступ к объекту quickjson UTF-8 и выполнить сопоставление шаблонов для "orderid"?

Теги:
filestream

1 ответ

0

Данные, которые вы предоставили, не являются действительными JSON. Действительный JSON - это что-то вроде:

{
"success":1,
"orderid":192877561,
"moreinfo":"Your Buy order has been placed for<br><b>0.00100000 DRK @ 0.00517290 BTC</b> each.<br>Order ID: <b>192877561</b>"
}

Разбор должен был провалиться. Вы можете проверить, является ли синтаксический анализ успешным с помощью функции a.HasParseError().

Кроме того, после разбора приведенного выше JSON, корень этого объекта является типом объекта, вы можете использовать a["moreinfo"] для доступа к его связанному значению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню