Sorting JSON keys is a common problem when marshalling ordered maps in Golang. When we get data from a database or other data source and marshal it into JSON format, we often need to sort the keys to ensure that the output JSON object has a consistent key order. Implementing this function in Golang is not complicated. We can use a combination of structures and slices to implement the function of sorting keys. We can easily achieve the goal of sorting JSON keys by storing the key-value pairs in a slice of a struct and using the sort package to sort the slices. In this article, we will explain how to sort JSON keys when marshaling an ordered map in Golang, and provide a simple example code to demonstrate the process.
I need to iterate over a given JSON fragment and the array contains individual items to convert it to a map. This is easy to do.
The problem is, I need to return a piece of JSON to the client in the order it was presented.
I found some guides on using OrderedMap but it doesn't seem consistent to me.
Sometimes I get the correct order, sometimes not.
https://go.dev/play/p/b9hmS9BEymy
Can anyone suggest? Judging from the logging, the problem may be with unmarshaling the incoming JSON
I'm really reluctant to use structs because the real JSON I need to deal with is very complex and requires a lot of work since there are so many variations.
Unmarshaling the json will not follow the order because you use map[string]interface{}
. Map in golang is a hashmap, so this is not surprising. What you should do is create an UnmarshalJSON
function and do custom unmarshalling, otherwise the order cannot be preserved.
You can use standard unmarshalling for all other types except maps, which should make it easier. If you want details on how to do this I can explain that too
The above is the detailed content of Issues with sorting JSON keys when marshalling ordered maps in Golang. For more information, please follow other related articles on the PHP Chinese website!