powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите с JSON, "создать подуровень"
6 сообщений из 6, страница 1 из 1
Помогите с JSON, "создать подуровень"
    #39773599
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Мне нужно дописывать в узлы JSON "подуровни".

Типа вот так было:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
      "TORG": {
        "ID": 1,
        "IDTYPE": 2,
        "IDPAR": 3,
        "NAME": "sample string 4",
        "FULLNAME": "sample string 5",
        "INN": "sample string 6",
        "IDFIASJUR": 7,
        "FIASJUR": "",
        "IDFIASFACT": 8,
        "FIASFACT": ""
...




И вот так стало:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
      "TORG": {
        "ID": 1,
        "IDTYPE": 2,
        "IDPAR": 3,
        "NAME": "sample string 4",
        "FULLNAME": "sample string 5",
        "INN": "sample string 6",
        "IDFIASJUR": 7,
        "FIASJUR": {
          "ID": 1,
          "REGIONVAR": "sample string 2",
          "REGIONGUID": "a9d50645-3686-4d67-b274-c860dad26ada",
          "AREAVAR": "sample string 4",
          "AREAGUID": "b0c205a1-c1c5-43cf-9ea6-900fffa4b7c3",
          "PLACEVAR": "sample string 5",
          "PLACEGUID": "d7a510e0-9081-4061-ae6c-4416db649146",
          "STREETVAR": "sample string 7",
          "STREETGUID": "4e17eff2-cb81-4cb1-b717-52869f4c2b49",
          "HOUSEVAR": "sample string 9",
          "HOUSEGUID": "7568d4bb-e294-470b-83ee-dffa4df353d1",
          "POSTALCODE": "sample string 11",
          "ISMANUAL": 12,
          "ADDRESS": "sample string 13"
        },
        "IDFIASFACT": 8,
        "FIASFACT": {
          "ID": 1,
          "REGIONVAR": "sample string 2",
          "REGIONGUID": "a9d50645-3686-4d67-b274-c860dad26ada",
          "AREAVAR": "sample string 4",
          "AREAGUID": "b0c205a1-c1c5-43cf-9ea6-900fffa4b7c3",




Делаю вот такой процедурой
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
                with (AJSONArrayData.Items[AJSONArrayData.Count-1] as TJSONObject) do //это очередной элемент TORG на примере
                for i := 0 to Count-1 do
                if (Pos('FIAS', UpperCase(Pairs[i].JsonString.Value)) = 1) then
                begin
                  SLFIAS.Clear;
//                  SLFIAS.AddPair('PlainData', '1');
                  try
                    AJSONArrayDataFIAS :=
                     TJSONObject.ParseJSONValue(
                      ConstructJSONAnswerBySQL('select * from TFIASOBJ where ID='+UpperCase(Pairs[i-1].JsonValue.Value), [],
                      True, 0, FIASRC, FIASRH, SLFIAS) //эта процедура возвращает готовый json по запросу
                    ) as TJSONObject;

                    Pairs[i].JsonValue := (AJSONArrayDataFIAS).Clone as TJSONValue; //проблема тут, если эту строчку убрать, то утечки нет
                  finally
                    AJSONArrayDataFIAS.Free;
                  end;
                end;



Происходит утечка памяти, а это WebBroker.

Подскажите, как внедрять другой json как значение существующего узла?
Спасибо!

PS. Если этот метод выполнялся, то ReportMemoryLeaksOnShutdown на выходе выдает это:
...
Рейтинг: 0 / 0
Помогите с JSON, "создать подуровень"
    #39773601
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
  AJSON : TJSONObject;
  AJSONArrayData: TJSONArray;
  FIASRC, FIASRH: Integer;
  AJSONArrayDataFIAS: TJSONObject;


если это важно
...
Рейтинг: 0 / 0
Помогите с JSON, "создать подуровень"
    #39773605
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

Посмотри здесь 21725004
...
Рейтинг: 0 / 0
Помогите с JSON, "создать подуровень"
    #39773673
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всего лишь перед
Код: pascal
1.
Pairs[i].JsonValue := (AJSONArrayDataFIAS).Clone as TJSONValue;

надо добавить
Код: pascal
1.
Pairs[i].JsonValue.Free;


утро вечера мудреннее
...
Рейтинг: 0 / 0
Помогите с JSON, "создать подуровень"
    #39773694
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

Примерно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
function MakeJSON: string;
  var
    jWriter: TJsonTextWriter;
    sWriter: TStringWriter;
  begin
    sWriter := TStringWriter.Create();
    jWriter := TJsonTextWriter.Create(sWriter);
    try
      jWriter.Formatting := TJsonFormatting.Indented;
      jWriter.WriteStartObject;

      jWriter.WritePropertyName('method');
      jWriter.WriteValue('checkBalance');
      jWriter.WritePropertyName('params');

      jWriter.WriteStartObject;

      jWriter.WritePropertyName('language');
      jWriter.WriteValue('ru');

      jWriter.WritePropertyName('currency');
      jWriter.WriteValue('840');

      jWriter.WritePropertyName('printReceipt');
      jWriter.WriteValue(False);

      jWriter.WriteEndObject;
      jWriter.WriteEndObject;
      Result := sWriter.ToString;
    finally
      jWriter.Free;
      sWriter.Free;
    end;
  end;



Это даст:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
/*
{
    "method":"checkBalance",
    "params":{
            "language":"ru",
            "currency":"840",
            "printReceipt":false
     }
}
*/
...
Рейтинг: 0 / 0
Помогите с JSON, "создать подуровень"
    #39773868
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DevillioДобрый день!

Мне нужно дописывать в узлы JSON "подуровни".

Типа вот так было:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
      "TORG": {
        "ID": 1,
        "IDTYPE": 2,
        "IDPAR": 3,
        "NAME": "sample string 4",
        "FULLNAME": "sample string 5",
        "INN": "sample string 6",
        "IDFIASJUR": 7,
        "FIASJUR": "",
        "IDFIASFACT": 8,
        "FIASFACT": ""
...





И вот так стало:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
      "TORG": {
        "ID": 1,
        "IDTYPE": 2,
        "IDPAR": 3,
        "NAME": "sample string 4",
        "FULLNAME": "sample string 5",
        "INN": "sample string 6",
        "IDFIASJUR": 7,
        "FIASJUR": {
          "ID": 1,
          "REGIONVAR": "sample string 2",
          "REGIONGUID": "a9d50645-3686-4d67-b274-c860dad26ada",
          "AREAVAR": "sample string 4",
          "AREAGUID": "b0c205a1-c1c5-43cf-9ea6-900fffa4b7c3",
          "PLACEVAR": "sample string 5",
          "PLACEGUID": "d7a510e0-9081-4061-ae6c-4416db649146",
          "STREETVAR": "sample string 7",
          "STREETGUID": "4e17eff2-cb81-4cb1-b717-52869f4c2b49",
          "HOUSEVAR": "sample string 9",
          "HOUSEGUID": "7568d4bb-e294-470b-83ee-dffa4df353d1",
          "POSTALCODE": "sample string 11",
          "ISMANUAL": 12,
          "ADDRESS": "sample string 13"
        },
        "IDFIASFACT": 8,
        "FIASFACT": {
          "ID": 1,
          "REGIONVAR": "sample string 2",
          "REGIONGUID": "a9d50645-3686-4d67-b274-c860dad26ada",
          "AREAVAR": "sample string 4",
          "AREAGUID": "b0c205a1-c1c5-43cf-9ea6-900fffa4b7c3",





Делаю вот такой процедурой
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
                with (AJSONArrayData.Items[AJSONArrayData.Count-1] as TJSONObject) do //это очередной элемент TORG на примере
                for i := 0 to Count-1 do
                if (Pos('FIAS', UpperCase(Pairs[i].JsonString.Value)) = 1) then
                begin
                  SLFIAS.Clear;
//                  SLFIAS.AddPair('PlainData', '1');
                  try
                    AJSONArrayDataFIAS :=
                     TJSONObject.ParseJSONValue(
                      ConstructJSONAnswerBySQL('select * from TFIASOBJ where ID='+UpperCase(Pairs[i-1].JsonValue.Value), [],
                      True, 0, FIASRC, FIASRH, SLFIAS) //эта процедура возвращает готовый json по запросу
                    ) as TJSONObject;

                    Pairs[i].JsonValue := (AJSONArrayDataFIAS).Clone as TJSONValue; //проблема тут, если эту строчку убрать, то утечки нет
                  finally
                    AJSONArrayDataFIAS.Free;
                  end;
                end;




Происходит утечка памяти, а это WebBroker.

Подскажите, как внедрять другой json как значение существующего узла?
Спасибо!

PS. Если этот метод выполнялся, то ReportMemoryLeaksOnShutdown на выходе выдает это:



Что вы мучаетесь, используйте superobject, с ним в миллион раз удобнее, быстрее, безопаснее:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
uses
  superobject;
...
var
  fSO: ISuperObject;
  fSO2: ISuperObject;
begin
  fSO := SO();
  // Работаем разными способами:
  fSO.O['TORG'] := SO('{"ID" : 1, "IDTYPE" : 2, "IDPAR" : 3}');

  fSO2 := fSO.O['TORG'];
  fSO2.S['NAME'] := 'sample string 4';
  fSO2.S['FULLNAME'] := 'sample string 5';
  fSO.O['TORG'].S['INN'] := 'sample string 6';
  fSO['TORG.IDFIASJUR'] := SO('7');

  fSO['TORG.FIASJUR'] := SO('{"ID": 1, "REGIONVAR": "sample string 2"}');
  fSO2 := fSO['TORG.FIASJUR'];
  fSO2.S['POSTALCODE'] := 'sample string 11';
  fSO2.I['ISMANUAL'] := 2;
  fSO['TORG.FIASJUR'].S['PLACEGUID'] := 'd7a510e0-9081-4061-ae6c-4416db649146';

  fSO2 := SO();
  fSO2.I['ID'] := 1;
  fSO2.S['REGIONVAR'] := 'sample string 2';
  fSO2.Merge(SO('{"AREAVAR": "sample string 4",  "AREAGUID": "b0c205a1-c1c5-43cf-9ea6-900fffa4b7c3"}'));
  fSO['TORG.IDFIASFACT'] := fSO2;

  ShowMessage(fSO.AsJSon(True, False));


Результат:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
"TORG": {
  "ID": 1,
  "IDTYPE": 2,
  "IDPAR": 3,
  "NAME": "sample string 4"
  "FULLNAME": "sample string 5",
  "IDFIASJUR": 7,
  "INN": "sample string 6",
  "FIASJUR": {
    "ISMANUAL": 2,
    "ID": 1,
    "POSTALCODE": "sample string 11",
    "REGIONVAR": "sample string 2"
    "POSTALCODE": "sample string 11",
    "REGIONVAR": "sample string 2"
    "PLACEGUID": "d7a510e0-9081-4061-ae6c-4416db649146",
  },
  "IDFIASFACT": {
    "AREAGUID": "b0c205a1-c1c5-43cf-9ea6-900fffa4b7c3",
    "ID": 1,
    "AREAVAR": "sample string 4",
    "REGIONVAR": "sample string 2"
  },
}
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите с JSON, "создать подуровень"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]