The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Красиво собрать массив из глубин JSON"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Perl)
Изначальное сообщение [ Отслеживать ]

"Красиво собрать массив из глубин JSON"  –1 +/
Сообщение от GoldenCeylon (?), 08-Фев-19, 09:13 
Всем привет!
Ломаю голову..

Есть JSON:
print Dumper($json);
$VAR1 = [
{
  "id" : "1",
  "name" : "Name1"
},
{
  "id" : "2",
  "name" : "Name2"
},
{
  "id" : "3",
  "name" : "Name3"
}
]
Список может быть большой

Их него нужно вытащить все элементы "name" и запихнуть их в одномерный массив: @names = ("Name1", "Name2", "Name3")

Первое что приходит в голову:
for my $elem ( @$json ){
push @names, $elem->{"name"};
}
print Dumper(@names);

Ну, имеем то, что хотели:
#Name1Name2Name3

ВОПРОС
Есть способ получить желаемое в одно касание, без перебора? По типу, как взять 1 элемент:
$name = $json->[0]->{"name"};
так хотелось бы сразу все "name"

Спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Красиво собрать массив из глубин JSON"  +/
Сообщение от Andrey Mitrofanov (?), 08-Фев-19, 09:24 
> ВОПРОС
> Есть способ получить желаемое в одно касание, без перебора? По типу, как
> взять 1 элемент:
> $name = $json->[0]->{"name"};
> так хотелось бы сразу все "name"
> Спасибо.

Э... это _должно_ называться map().  Я почти :) уверен.

Перла не знаю, "но вы держитесь":

$ dat() { echo '[ -- json SKIPPED --]'; }
$ dat |jq '[.[].name]'
[
  "Name1",
  "Name2",
  "Name3"
]
$ dat |jq 'map(.name)'
[
  "Name1",
  "Name2",
  "Name3"
]
$ _

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Красиво собрать массив из глубин JSON"  +/
Сообщение от михалыч (ok), 08-Фев-19, 16:29 
> Э... это _должно_ называться map().  Я почти :) уверен.

да, есть это

print join("," , map{ $_->{name}} @{$json});

> Перла не знаю, "но вы держитесь":

скромничаешь! хых ))
и всё-то ты знаешь

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Красиво собрать массив из глубин JSON"  +1 +/
Сообщение от GoldenCeylon (?), 11-Фев-19, 12:23 
> print join("," , map{ $_->{name}} @{$json});

Подитожу:
@names = map{$_->{name}} @{$json};
или
@names = map{$_->{name}} @$json;

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

3. "Красиво собрать массив из глубин JSON"  +/
Сообщение от Аноним (3), 10-Фев-19, 05:06 
> Всем привет!
> Ломаю голову..
> Список большой
> Есть способ получить желаемое?
> И хотелось бы сразу всё!
> Спасибо.

Ok google!
Как сделать мне хорошо и красиво?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Красиво собрать массив из глубин JSON"  +/
Сообщение от Аноним (5), 14-Фев-19, 13:53 
Без перебора только так. Регулярку не проверял.

my @names = $json_str =~ m/name["\s]*:\s*"([^"]+)/g ;

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема


  Закладки на сайте
  Проследить за страницей
Created 1996-2019 by Maxim Chirkov  
ДобавитьПоддержатьВебмастеруГИД  
Hosting by Ihor