json.go 625 B

12345678910111213141516171819202122232425262728293031323334
  1. package utils
  2. import (
  3. "encoding/json"
  4. "strings"
  5. )
  6. func GetJSONKeys(jsonStr string) (keys []string, err error) {
  7. // 使用json.Decoder,以便在解析过程中记录键的顺序
  8. dec := json.NewDecoder(strings.NewReader(jsonStr))
  9. t, err := dec.Token()
  10. if err != nil {
  11. return nil, err
  12. }
  13. // 确保数据是一个对象
  14. if t != json.Delim('{') {
  15. return nil, err
  16. }
  17. for dec.More() {
  18. t, err = dec.Token()
  19. if err != nil {
  20. return nil, err
  21. }
  22. keys = append(keys, t.(string))
  23. // 解析值
  24. var value interface{}
  25. err = dec.Decode(&value)
  26. if err != nil {
  27. return nil, err
  28. }
  29. }
  30. return keys, nil
  31. }