• Как обработать несуществующий json.RawMessage в GO?

    @Sovin Автор вопроса
    Папа Стифлера,

    spoiler
    {"response":[{"id":1,"first_name":"Павел","last_name":"Дуров","is_closed":false,"can_access_closed":true,"sex":2,"nickname":"","screen_name":"durov","bdate":"10.10.1984","city":{"id":2,"title":"Санкт-Петербург"},"country":{"id":1,"title":"Россия"},"photo":"https:\/\/pp.userapi.com\/c836333\/v836333001\/31193\/dNxZpRF-z_M.jpg?ava=1","photo_medium":"https:\/\/pp.userapi.com\/c836333\/v836333001\/31192\/y1Cm4JfplhQ.jpg?ava=1","photo_big":"https:\/\/pp.userapi.com\/c836333\/v836333001\/3118f\/3OWOVNTv67U.jpg?ava=1","has_mobile":1,"online":0,"can_post":0,"can_see_all_posts":0,"can_write_private_message":0,"activity":"道德經","last_seen":{"time":1544794101,"platform":7},"followers_count":5908134,"university":1,"university_name":"СПбГУ","faculty":0,"faculty_name":"","graduation":2006,"relation":0,"personal":{"political":9,"langs":["Русский","English","Français","Deutsch","Español","Italiano","Lingua Latina","فارسی"],"religion":"Laissez-faire","inspired_by":"Steve Jobs","people_main":5,"life_main":6,"smoking":1,"alcohol":1},"universities":[{"id":1,"country":1,"city":2,"name":"СПбГУ","graduation":2006}]}]}


    Так же может вернуть errror:

    spoiler
    {"error":{"error_code":3,"error_msg":"Unknown method passed","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"user1.get"},{"key":"user_ids","value":"1"},{"key":"fields","value":"nickname,followers_count,personal,screen_name,sex,bdate,city,country,photo,photo_medium,photo_big,has_mobile,contacts,education,online,relation,last_seen,activity,can_write_private_message,can_see_all_posts,can_post,universities"},{"key":"lang","value":"0"},{"key":"v","value":"5.92"}]}}


    Но с error у меня нет проблем, т.к он всегда возвращает error_code и error_msg

    Все это заворачивается так:

    type APIResponse struct {
    	Response      json.RawMessage `json:"response"`
    	ResponseError Error           `json:"error"`
    }
    
    type Error struct {
    	ErrorCode int    `json:"error_code"`
    	ErrorMsg  string `json:"error_msg"`
    }
  • Как обработать несуществующий json.RawMessage в GO?

    @Sovin Автор вопроса
    if len(settingList) == 0 {
    // данных нет
    return
    }

    Это помогло определить существует ли пользователь, т.к При существовании, всегда есть одно из полей которое заполнено, а следовательно пользователь существует к примеру его ID.

    Но проблема состоит в том, что я не могу понять, как определить и обработать, нужный мне KEY в ответе если его нет.

    И следовательно паника возникает из-за несуществующего KEY в ответе.
  • Как обработать несуществующий json.RawMessage в GO?

    @Sovin Автор вопроса
    type User struct {
    ID int `json:"id"`
    FirstName string `json:"first_name"`
    LastName string `json:"last_name"`
    Status string `json:"status"`
    LastOnline *LastSeen `json:"last_seen"`
    }

    var userList []*User
    json.Unmarshal(resp.Response, &userList)
    c.String(http.StatusOK, userList[0].LastName)

    Больше половины структуры может отсутствовать в ответе именно отсутствовать, а не возвращаться пустыми.
  • Как обработать несуществующий json.RawMessage в GO?

    @Sovin Автор вопроса
    Все та же ошибка:
    runtime error: index out of range

    if item.online == "" {
    item.online = "не указано"
    }

    Проблема в том, что в структуре он есть, но при ответе api может его вообще не отдать - то есть item.online в ответе может не существовать, как структуры

    Еще проще:

    Может отдать так:
    [ online: "info", status: "info"]
    А может так:
    [ status: "info"]