2014-11-06 3 views
0

код:Как мне сопоставить объект quickjson?

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'.

Я пробовал почти каждый метод отсюда ->rapidjson user guide, чтобы получить доступ к входящим данным 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 (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. 

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

ответ

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"] для доступа к его связанному значению.

Смежные вопросы