2015-06-11 2 views
1

Я пытаюсь написать структуру json, используя метод fastjson sax. Вот что я делаю:Запись вложенных массивов с помощью метода fastjson «SAX»

StringBuffer sb; 
    PrettyWriter<StringBuffer> writer(sb); 
    writer.StartObject(); 

    writer.Key("user"); 
    writer.StartArray(); 

    OperatorAcPtrList::iterator xIt; 
    for (xIt = userList.begin(); xIt != userList.end(); xIt++) 
    { 
    writer.Key("userId"); 
    writer.Uint((*xIt)->id); 

    writer.Key("productIdList"); 
    writer.StartArray(); 

    ProductIdList::iterator xPrdIdIt; 
    for (xPrdIdIt = ((*xIt)->productList).begin(); 
     xPrdIdIt != ((*xIt)->productList).end(); xPrdIdIt++) 
    { 
     writer.Uint(*xPrdIdIt); 
    } 
    writer.EndArray(); 
    } 
    writer.EndArray(); 
    writer.EndObject(); 

Но результат не то, что я ожидал, это:

{ 
    "userList": [ 
     "userId", 
     20, 
     "productIdList", 
     [ 
      1, 
      2 
     ], 
     "userId", 
     21, 
     "productIdList", 
     [ 
      1, 
      2 
     ] 
    ] 
} 

Похоже, все внутри первого StartArray EndArray становится элементом массива. Вместо этого я хотел бы получить:

{ 
    "userList": [ 
     { 
      "userId" : 20, 
      "productIdList" : [1, 2], 
     }, 
     { 
      "userId" : 21, 
      "productIdList" : [1, 2] 
     } 
    ] 
} 

Я делаю что-то не так, или то, что я хочу, не поддерживается вообще?

ответ

1

Прежде чем вы позвоните writer.Key("userId"); в цикл for, добавьте writer.StartObject(); и добавьте writer.EndObject(); соответственно. Вот пример:

#include "rapidjson/writer.h" 
#include "rapidjson/stringbuffer.h" 
#include <iostream> 

using namespace rapidjson; 
using namespace std; 

int main() { 
    StringBuffer s; 
    Writer<StringBuffer> writer(s); 
    writer.StartObject(); 

    writer.Key("userList"); 
    writer.StartArray(); 

    writer.StartObject(); 
    writer.Key("userId"); 
    writer.Uint(20); 
    writer.Key("productIdList"); 
    writer.StartArray(); 
    for (unsigned i = 1; i < 3; i++) 
     writer.Uint(i); 
    writer.EndArray(); 
    writer.EndObject(); 

    writer.StartObject(); 
    writer.Key("userId"); 
    writer.Uint(21); 
    writer.Key("productIdList"); 
    writer.StartArray(); 
    for (unsigned i = 1; i < 3; i++) 
     writer.Uint(i); 
    writer.EndArray(); 
    writer.EndObject(); 

    writer.EndArray(); 
    writer.EndObject(); 
    cout << s.GetString() << endl; 
} 
Смежные вопросы