как предотвратить сортировку карты? - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть карта

{
"m_key": 123,
"z_key": 123,
"a_key": 123,
"f_key": 123
}

Когда я пытаюсь сделать из нее json и распечатать ее, мой json сортируется по ключу, и я получаю json:

{
"a_key": 123,
"f_key": 123,
"m_key": 123,
"z_key": 123
}

1 Ответ

0 голосов
/ 23 сентября 2018

Чтобы ответить на исходный вопрос, используйте упорядоченную карту

package main

import (
    "encoding/json"
    "fmt"
    "github.com/iancoleman/orderedmap"
)

func main() {

    o := orderedmap.New()

    // use Set instead of o["a"] = 1

    o.Set("m_key", "123") // go json.Marshall doesn't like integers
    o.Set("z_key", "123")
    o.Set("a_key", "123")
    o.Set("f_key", "123")

    // serialize to a json string using encoding/json
    prettyBytes, _ := json.Marshal(o)
    fmt.Printf("%s", prettyBytes)
}

Но в соответствии со спецификацией https://json -schema.org / latest / json-schema-core.html # rfc.section.4.2 нет гарантии, что порядок карт соблюден, поэтому, вероятно, лучше использовать массив вместо вывода json

   // convert to array
    fmt.Printf("\n\n\n")
    arr := make([]string, 8)
    c := 0
    for _, k := range o.Keys() {
            arr[c] = k
            c++
            v, _ := o.Get(k)
            arr[c], _ = v.(string)
            c++
    }

    morePretty, _ := json.Marshal(arr)
    fmt.Printf("%s", morePretty)

Когда массив будет перезагружен, он будет в правильном порядке

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