JSON не разбирается в C ++ Builder 2010 - PullRequest
0 голосов
/ 11 марта 2011

Я начинаю работать с JSON в компоновщике, включая #include<DBXJSON.hpp>

, выполняю простой анализ, но без результата

вот мой код

void __fastcall TForm1::okClick(TObject *Sender)
{
    TJSONObject *obj=new TJSONObject();
    TBytes StringBytes = TEncoding::UTF8->GetBytes(Memo1->Text);
    obj->Parse(StringBytes, 0);
    Memo2->Text = obj->ToString();
    obj->~TJSONObject();
} 

myMemo1-> Text содержит

{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]

}

, в конце концов, Memo2-> Text

получает {}

Ответы [ 2 ]

1 голос
/ 04 апреля 2014

Для C ++ Builder также имеется библиотека JSonCBuilderBlog, она бесплатна и имеет открытый исходный код.

Ваш исходный код можно перевести следующим образом:

TMetaObject obj;
obj.Decode(Memo1->Text);
Memo2->Text = obj.Encode();

Как высм. приведенный выше код очень прост и не требует никакого оператора удаления.

Учитывая вашу исходную строку JSON, вы можете получить доступ к своим данным после их декодирования следующим образом:

UnicodeString FirstName = obj["firstName"];
UnicodeString LastName  = obj["lastName"];
UnicodeString Street    = obj["address"]["streetAddress"];
UnicodeString City      = obj["address"]["city"];
....

Кроме того, библиотека JSonCBuilderBlog способна определить новый тип данных и выполняет строгую проверку типов в исходной строке JSON.Это полезно для проверки согласованности данных на основе нового типа данных, определенного пользователем.

Для справки перейдите по ссылке библиотеки: JSonCBuilderBlog Библиотека классов.

1 голос
/ 18 марта 2011

Если память служит, это не поддерживалось в C ++ Builder 2010, потому что DBXJSON использует RTTI Delphi, который не был корректно поддержан до C ++ Builder XE.

...