LINUX.ORG.RU

Поиск key в golang для списка json.

 , ,


0

1

Получаю через Github API список релизов в JSON формате.

curl https://api.github.com/repos/rabbitmq/erlang-rpm/releases

Получается примерно такая картина:

Картинка не грузится - ссылка https://habrastorage.org/webt/zv/yk/jb/zvykjbbxxvbntq-eyh3dpcdopvo.jpeg

Я пытаюсь получить ссылки на rpm на последние релизы используя Golang.

Вот репо https://github.com/patsevanton/few_latest_artefact_github_release

Пытался и через стандартный JSON unmarshal и через gjson.

Сейчас активирован gjson.

https://github.com/patsevanton/few_latest_artefact_github_release/blob/master/main.go#L108

Сейчас, если запустить go run main.go, то получим пустую строку.

Я так понимаю что парсится не просто JSON, а список JSON - в начале видно [ а потом уже {.

Как получить доступ хотя бы к assets_url ? Спасибо.



Последнее исправление: chemtech (всего исправлений: 3)

Не планирую читать за тебя документацию gjson, но могу предположить, что нужно обращение по индексу. [] — массив JSON.

anonymous
()
Ответ на: комментарий от beastie

TL;DR:

package main

import (
	"context"
	"fmt"

	"github.com/google/go-github/v28/github"
)

func main() {
	client := github.NewClient(nil)
	rels, _, _ := client.Repositories.ListReleases(context.Background(), "rabbitmq", "erlang-rpm", nil)
	for _, rel := range rels {
		asses, _, _ := client.Repositories.ListReleaseAssets(context.Background(), "rabbitmq", "erlang-rpm", rel.GetID(), nil)
		for _, ass := range asses {
			fmt.Println(rel.GetName(), ass.GetName(), ass.GetBrowserDownloadURL())
		}
	}
}

В общем, как-то так. Дальше сам резберёшься.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)

у тебя же все было правильно, зачем полез в какие-то gjson? Раскомментируй свою структуру и напиши что-то типа

var releases Struct_from_releases
if err := json.NewDecoder(response.Body).Decode(&releases); err != nil {
    fmt.Println(err)
    return
}
for _, release := range releases {
    fmt.Println(release.AssetsURL)
}

УМВР. Только стиль поправь, в go не используют подчеркивания в названиях структур и переменных.

anonymous
()
Ответ на: комментарий от beastie

Спасибо. На github.com/google/go-github смотрел, но не до конца разобрался в нем.

chemtech
() автор топика
Последнее исправление: chemtech (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.