Получение значения из ответа Confluence JSON - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь получить поле идентификатора из ответа JSON на странице слияния, эти данные выглядят так:

`{"results":[{"id":"89425836","type":"page","status":"current","title":"string","extensions":{"position":"none"},"_links":{"webui":"/web/url","edit":"/pages/resumedraft.action?draftId=89425836","tinyui":"/x/rIdUBQ","self":"https://confluence.domain.org/rest/api/content/89425836"},"_expandable":{"container":"/rest/api/space/spaceName","metadata":"","operations":"","children":"/rest/api/content/89425836/child","restrictions":"/rest/api/content/89425836/restriction/byOperation","history":"/rest/api/content/89425836/history","ancestors":"","body":"","version":"","descendants":"/rest/api/content/89425836/descendant","space":"/rest/api/space/spaceName"}}],"start":0,"limit":25,"size":1,"_links":{"self":"https://confluence.domain.org/rest/api/content?spaceKey=spaceName&type=page&title=title","base":"https://confluence.domain.org","context":""}}`

Я искал в сети, и мой код должен работать, но оннет и я в растерянности

package main

import (
    "encoding/json"
    "net/http"
    "fmt"
    "io/ioutil"
)

type dataResponse struct {
    Id string `json:"id"`
}

func main() {

    var p dataResponse

    response, err := http.Get("https://confluence.domain.org/url/to/page/with/params"

    if err != nil {
       panic(err)
    } else {
      data, _ := ioutil.ReadAll(response.Body)
      json.Unmarshal(data, &p)
      fmt.Println(p.Id)
    }

   defer response.Body.Close()
}

Но это ничего не возвращает. Я думаю, что это как-то связано с тем, что поле id идет после «результатов», но не нашел способа с этим работать. Редактировать: обновил URL, случайно скопировал отладочный.

1 Ответ

0 голосов
/ 21 октября 2019

id находится в массиве объектов, внутри results. Чтобы распаковать документ json, ваша структура должна соответствовать документу:

type body struct {
  Results []dataResponse `json:"results"`
}

Тогда:

var doc body
json.Unmarshal(data, &doc)

Вы можете получить id из:

doc.Results[i].Id
...