Преобразовать структуру в [] json.RawMessage - PullRequest
0 голосов
/ 04 июня 2019

Попытка преобразовать структуру в [] json.RawMessage. Насколько я понимаю, json.Marshal () преобразует его в byte [] как есть [] json.RawMessage. Я, однако, не могу, кажется, конвертировать между ними. Моя функция ожидает получения ввода как []json.RawMessage.

Пробовал несколько различных методов, включая myIn := json.RawMessage(&myJsonStruct{"string1", "string2"}) и myIn := (*json.RawMessage)(json.Marshal(&myJsonStruct{"string1", "string2"}))

type myJsonStruct struct {
    myString       string  `json:"myString"`
    mySecongString string  `json:"mySecondString"`
}

myIn := json.Marshal(&myJsonStruct{"string1", "string2"})

myFunction(myIn)

myFunction(receivedIn []json.RawMessage) {
    //do work
    return
}

1 Ответ

2 голосов
/ 04 июня 2019

Здесь есть несколько вещей:

  1. Вам необходимо создать новый фрагмент json.RawMessage, чтобы передать ожидаемый тип в вашу функцию myFunction в качестве аргумента
  2. Сохраните результат маршалинга вашей пользовательской структуры myJsonStruct в переменной myIn (тип []byte)
  3. Создайте новую переменную myInRaw (тип json.RawMessage) и добавьте ее кранее созданный фрагмент json.RawMessage.

Вышеуказанные шаги позволят вам передать фрагмент json.RawMessage в вашу функцию для дальнейшей работы.

См.пример ниже или рабочий пример на детской площадке :

package main

import (
    "encoding/json"
)

type myJsonStruct struct {
    myString       string `json:"myString"`
    mySecongString string `json:"mySecondString"`
}

func myFunction(receivedIn []json.RawMessage) {
    //do work
    return
}

func main() {

    var rawJSONSlice []json.RawMessage

    myIn, err := json.Marshal(
        &myJsonStruct{
            myString:       "string1",
            mySecongString: "string2",
        },
    )
    if err != nil {
        // catch err
    }

    myInRaw := json.RawMessage(myIn)

    rawJSONSlice = append(rawJSONSlice, myInRaw)

    myFunction(rawJSONSlice)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...