|
|
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
Напишу сразу, чтобы не было флуда, использую стандартный TJSONObject . Просьба не тратить время на написание примеров, советов для других библиотек. Ну т.е. тот JSONObject использую, что идёт искаропки в Delphi Tokyo. Да, я знаю, что в других библиотеках может быть проще. А может быть и в стандартной так можно, как я хочу. Итак. Есть JSON строка, как на картинке для наглядности. На данный момент, у меня получается говнокод, который сперва получаю TJsonValue, потом TJSONObject для всей строки, т.е. общий JSON-объект, потом всякие проверки. Затем то же самое узла "result", потом всякие проверки. Потом то же самое нужно сделать для узла "ad_parameters" ну и дальше уже цикл по массиву. Могу показать, но страшно ))) А нельзя ли это всё превратить в одну строку типа Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 13:17 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
X11, сразу же советую переходить на superobject, дальше все одной строкой делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 13:58 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 15:50 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
X11Странно, что я никогда в примерах и справках не видел, что так реально можно. Я тоже. Но я исходил из теории, что так можно. Открыл исходники и посмотрел. Зацепился за имя параметра APath у GetValue. Прочитал в хелпе его формат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 16:46 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
Что не так? Код: pascal 1. 2. 3. 4. 5. Incompatible types: 'TJSONPair' and 'TJSONValue' Как правильно сделать цикл по TJSONArray? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 11:50 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
Нужно объявить JSONPair как TJSONValue ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 11:56 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
X11, Дерево и его узлы - это в XML. В JSON (JavaScript Object Notation) - объекты и их свойства, массивы и их элементы. В том числе, само собой - вложенные объекты. Мне кажется, если это понимать, то какие-то вопросы решаются. Объект состояит из пар - имя-значение. JSONОбъект - неупорядоченный набор пар ключ/значение. Объект начинается с {открывающей фигурной скобки и заканчивается }закрывающей фигурной скобкой. https://www.json.org/json-ru.html Массив - из элементов. JSONМассив - упорядоченная коллекция значений. Массив начинается с [открывающей квадратной скобки и заканчивается ]закрывающей квадратной скобкой. Чем является этот элемент массива или значение пары в объекте - объектом, массивом или чем-то еще - это уже другое дело. Исходя из этого, получается и ответ на ваш вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 13:14 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
s62, я написал, что массив состоит из элементов, для вопроса "Как правильно сделать цикл по TJSONArray? " важней наверное, что каждый элемент это значение (а не пара), как написано в процитированном мной определении с сайта JSON. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 13:22 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
значения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 13:30 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
А почему Delphi не разрешает проверить тип? Код: pascal 1. 2. 3. 4. 5. 6. 7. Incompatible types: 'TJSONValue' and 'TJSONPair' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 15:04 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
X11А почему Delphi не разрешает проверить тип? Incompatible types: 'TJSONValue' and 'TJSONPair'Эти классы не являются потомками один другого. и значит заведомо не могут быть совместимы. можно TObject проверять на любой класс, ибо он предок для всех. аналогично как с Код: pascal 1. 2. 3. 4. объявляй JSONPair как предок обоих классов, т.е. TJSONAncestor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 16:06 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
X11значения Правильно, как я и написал, каждый элемент массива является значением, а не парой имя:значение. Поэтому и нужно Код: pascal 1. 2. 3. 4. 5. а не использовать TJSONPair, как было сначала у вас. А вот это значение уже в свою очередь может быть числом, строкой, true, false, null, объектом или массивом. В вашем случае по этой схеме мне не совсем понятно, то ли объекты, то ли массивы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2019, 18:26 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, а можно как-то добраться таким описанным тобою способом до элемента "p" и получить его значение? Или только полным перебором всех элементов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2019, 11:35 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
Можно ли этого монстра упростить/оптимизировать или всё правильно? Задача: получить значение элемента "vl", но только если значение элемента "p" соответствует какому-то определённому значению, в данном случае "area". У других элементов этого списка (ad_parameters) - другие значения. Грубо говоря, нужно найти город. Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2019, 11:52 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
количество элементов в массиве ad_parameters может быть разное и неизвестно заранее, в каком индексе живёт тот или иной элемент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2019, 11:56 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
проверки не заворачивать во вложенные блоки, а делать Exit после негативного результата. А зачем перебор параметров, если они у тебя четко определенные? Код: pascal 1. Ну а в целом нужно что-то вроде xpath, наверняка можно добавить функцию с поиском через хелперы, чтобы писать так Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2019, 15:05 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
Василий 2А зачем перебор параметров, если они у тебя четко определенные? спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 08:51 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
Но у JSONPair отсутствует метод Get ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 11:45 |
|
||
|
Получить подчинённый узел в JSON
|
|||
|---|---|---|---|
|
#18+
В общем, сократил до Код: 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. ещё раз спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 11:57 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39846398&tid=2039156]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 394ms |

| 0 / 0 |
