Как получить значение карты с помощью json marshal - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно преобразовать строку JSON в карту.Вот моя программа go.

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    str := `{
       "Bangalore_City": "35_Temperature",
       "NewYork_City": "31_Temperature",
       "Copenhagen_City": "29_Temperature",
       "hobbies" : {
           "name" : "username"
       }
    }`
    var m map[string]interface{}
    json.Unmarshal([]byte(str), &m)

    fmt.Println(m["hobbies"]["name"])
}

Если я использую этот код, я получаю следующую ошибку.

get.go:26:26: invalid operation: m["hobbies"]["name"] (type interface {} does not support indexing)

Пожалуйста, помогите решить эту проблему.Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вам нужно набрать assert на m["hobbies"], чтобы тоже быть map[string]interface{}, например this :

fmt.Println(m["hobbies"].(map[string]interface{})["name"])

Вы также можете проверить, что оно имеет ожидаемыйвведите перед доступом к имени

0 голосов
/ 08 октября 2018

Я использую jsoniter (github.com/json-iterator/go), который очень быстр и совместим с пакетом golang json для этого:

код может быть таким

jsoniter.Get([]byte(str), "hobbies", "name")

Или вы можете написать такой код при использовании golang json:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    str := `{
       "Bangalore_City": "35_Temperature",
       "NewYork_City": "31_Temperature",
       "Copenhagen_City": "29_Temperature",
       "hobbies" : {
           "name" : "username"
       }
    }`
    var m map[string]interface{}
    json.Unmarshal([]byte(str), &m)
    // since m["hobbies"] is an interface type, u can't use it 
    // as a map[string]string type, so add a ".(map[string]string)"
    // to change this interface, then u can get the value of key "name"
    fmt.Println(m["hobbies"].(map[string]string)["name"])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...