Вот что у нас получится
Секрет в том, как я понял, чтобы подбираться к нужным нам элементам JSON последовательно. Изначально парсим исходный объект, далее, если он содержит в себе другие объекты или массивы, то подбираемся к нему через распарсенный изначальный объект. Вот как это будет выглядеть.
Вот наш исходный сложный JSON объект
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
{ "Sucess": true, "Msg": "OK", "SomeJsonObject": { "First": 0, "Next": true, "Total": 60, "Items": [ { "ID": 212121, "Name": "SomeName", "LcID": 9898, "Oclao": false, "Lal": { "ID": 12202, "Name": "SomeName1", "Pais": "Brasil", "Dtc": 0.0 }, "Subtype": { "ID": 7458, "Desc": "mnmnmnmnn" }, "Type": { "Sit": "cor1", "Sitrm": 0, "Name": "SomeName3" }, "Qtde": 0, "Qntcoes": 0, "Pubum": "adfsdfsdfs", "Evias": { "arq": { "Mo": [ "site.com" ], "Moir": [ "SomeSite.com" ] } } }, { "ID": 9797878, "Name": "SomeName4", "LcID": 9898, "Oclao": false, "Lal": { "ID": 12332, "Name": "SomeName5", "Pais": "Brasil", "Dtc": 0.0 }, "Subtipo": { "ID": 7458, "Desc": "mnmnmnmnn" }, "Tipo": { "Sit": "cor1", "Sitrm": 0, "Name": "SomeName5" }, "Qtde": 0, "Qntcoes": 0, "Pubum": "SomeName6", "Evias": { "arq": { "Mo": [ "site.com" ], "Moir": [ "site.com" ] } } } ] } } |
Вот как можно распарсить сложный объект при помощи System.JSON
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
procedure ParseComplJson(aJson: string); var originJo, someJsonObject, joItem: TJSONObject; joItems: TJSONArray; msg: string; success: Boolean; i: Integer; begin originJo := TJSONObject.ParseJSONValue(aJson) as TJSONObject; try success := originJo.GetValue('Success') is TJSONTrue; // for Delphi 10 Seattle or later, success := (OriginalJSONObject.GetValue('Success') as TJSONBool).AsBoolean; msg := originJo.GetValue('Msg').Value; someJsonObject := originJo.GetValue('SomeJsonObject') as TJSONObject; // names from array items joItems := someJsonObject.GetValue('Items') as TJSONArray; for i := 0 to joItems.Count - 1 do joItem := joItems.Items[i] as TJSONObject; // do smth like this joItem.GetValue('Name').Valuew finally originJo.Free(); end; end; |
Тестируем. Все работает