Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Json x-superobject  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
Доброе время суток!

Я нашёл пример, как получить в переменную ссылку на фото ....
+
{
"response":{
"count":1,
"items":[
{
"id":246365,
"date":1463913029,
"out":0,
"user_id":53453566,
"read_state":1,
"title":" ... ",
"body":"",
"deleted":1,
"attachments":[
{
"type":"photo",
"photo":{
"id":416603645,
"album_id":-3,
"owner_id":53453566,
"photo_75":"http:\/\/cs636717.vk.me\/v636717206\/8e61\/gSCbceBaWRo.jpg",
"photo_130":"http:\/\/cs636717.vk.me\/v636717206\/8e62\/d3GZYEzjB2k.jpg",
"photo_604":"http:\/\/cs636717.vk.me\/v636717206\/8e63\/FqoPyZe1Lx8.jpg",
"width":491,
"height":488,
"text":"",
"date":1463913029,
"access_key":"8bc37bf13f8d6df162"
}
}
]
}
]
}
}

получить ссылку на фото вот так:
photo:=SO(response).O['response'].A['items'].O[0].A['attachments'].O[0].O['photo'].s['photo_75'];

То-есть нужно пройтись как бы по дереву Json, сначала объект response, потом масссив items.... Но что это .O[0] ?

У меня есть вот такой кусок Json, из него нужно вырезать first_name last_name
{
"response":[
{
"id":438520578,
"first_name":"Инна",
"last_name":"Силина",
"photo_50":"https:\/\/vk.com\/images\/camera_50.png?ava=1"
}
]
}


Но как получить эти значения, если объект безымянный, а response в данном случае, является массивом.

И как и говорил, мне не понятно для чего это .O[0] ?
6 окт 18, 18:43    [21697096]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
Котовасия
Member

Откуда:
Сообщений: 1187
Tech N9ne,

это обращение к элементу с индексом ноль массива.

A['items']
- это массив items (в общем случае - массив объектов).

A['items'].O[0]
- это нулевой (т.е. первый по порядку) элемент массива items
6 окт 18, 19:05    [21697100]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
Котовасия,
+
{
"response":{
"count":1,
"items":[
{
"id":246365,
"date":1463913029,
"out":0,
"user_id":53453566,
"read_state":1,
"title":" ... ",
"body":"",
"deleted":1,
"attachments":[
{
"type":"photo",
"photo":{
"id":416603645,
"album_id":-3,
"owner_id":53453566,
"photo_75":"http:\/\/cs636717.vk.me\/v636717206\/8e61\/gSCbceBaWRo.jpg",
"photo_130":"http:\/\/cs636717.vk.me\/v636717206\/8e62\/d3GZYEzjB2k.jpg",
"photo_604":"http:\/\/cs636717.vk.me\/v636717206\/8e63\/FqoPyZe1Lx8.jpg",
"width":491,
"height":488,
"text":"",
"date":1463913029,
"access_key":"8bc37bf13f8d6df162"
}
}
]
}
]
}
}

первый по порядку элемент массива - "id", но для чего обращаться сначала к нему, а потом к следующему массиву "attachments" ?
Почему не сразу
photo:=SO(response).O['response'].A['items'].A['attachments'].O['photo'].s['photo_75'];


и как будет выглядеть обращение к елементу массива response, из этого json:
{
"response":[
{
"id":438520578,
"first_name":"Инна",
"last_name":"Силина",
"photo_50":"https:\/\/vk.com\/images\/camera_50.png?ava=1"
}
]
}


Извините, если я не догоняю элементарных вещей))
Заранее спасибо.
6 окт 18, 20:45    [21697121]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3940
Потому что сначала надо разобраться с самим json-форматом и узнать, что у него внутри (а там все просто -- либо объект {}, либо массив [], либо конкретное значение поля. Удобный сервис, куда можно вставить jsonи он распарсит его и представит в виде дерева:
http://jsonparseronline.com

После чего уже можно и код соответствующий вызывать и строить пути.
6 окт 18, 21:02    [21697125]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
JaDi
Потому что сначала надо разобраться с самим json-форматом и узнать, что у него внутри (а там все просто -- либо объект {}, либо массив [], либо конкретное значение поля. Удобный сервис, куда можно вставить jsonи он распарсит его и представит в виде дерева:
http://jsonparseronline.com

После чего уже можно и код соответствующий вызывать и строить пути.

Так это я понял, мне не понятно как выдрать first_name, если изначально у объкта нет имени, далее идёт массив под названием response, потом опять безямянный объект... как к ним обращаться к этим безымянным?
{
"response":[
{
"id":438520578,
"first_name":"Инна",
"last_name":"Силина",
"photo_50":"https:\/\/vk.com\/images\/camera_50.png?ava=1"
}
]
}
6 окт 18, 21:29    [21697137]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3940
Tech N9ne,

Там нет ничего безымянного. Квадратные скобки -- это массив, т.е. список однотипных объектов. В данном случае он там один. Т.е. образаться к нему надо через индекс 0.

"Response", [0], "first_name".
6 окт 18, 21:51    [21697144]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
Котовасия
Member

Откуда:
Сообщений: 1187
Tech N9ne,

разбирись сперва с самим форматом, а потом уже пытайся его использовать, все очень-очень просто: https://www.json.org/json-ru.html
6 окт 18, 22:13    [21697152]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9663
jpath / jsonpath - принцип адресации
библиотеки - у всех свои реализации первого
6 окт 18, 23:26    [21697173]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
Котовасия
Member

Откуда:
Сообщений: 1187
JaDi
...Квадратные скобки -- это массив, т.е. список однотипных объектов...

Нет, просто упорядоченный список значений. Фишка именно в упорядоченности, значения могут быть любого (для json) типа, вперемешку в рамках одного массива: строки, числа, объекты, массивы, значения true/false, null-ы...
7 окт 18, 00:06    [21697179]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
alfangur
Member

Откуда:
Сообщений: 9
в вашем примере O[0]:
O - Object\Объект (Это такой тип в JSON)
0 - число 0, потому что он находиться в массиве, если бы этот объект не находился в массиве он бы имел ключ с название, тогда бы пришлось вместо нуля указывать название ключа.

Вам уже товарищи посоветовали изучить эту тему.
7 окт 18, 01:09    [21697193]     Ответить | Цитировать Сообщить модератору
 Re: Json x-superobject  [new]
Котовасия
Member

Откуда:
Сообщений: 1187
Добавлю, что к элементу любого типа в SO можно обращаться как к элементу типа "объект", это иногда удобно, например, для проверки наличия элемента по имени (впрочем, для этого есть и иные методы) или для получения строкового представления значения элемента.
7 окт 18, 01:22    [21697195]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить