出现 type *ujson.JSON does not support indexing 错误不想解决

尝试用go-ujson https://github.com/mreiferson/go-ujson 来解析json 数据,把数据库里的json 字符解析为go map 数据,可以通过obj2.Get("somekey").String() 的方式获取某个key 的值。

ujson.JSON

但尝试更新某个key 的值就出现标题的错误:

1
type *ujson.JSON does not support indexing

用标准库

只能通过go 标准库来做了:

Go:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
 
import (
    "encoding/json"
    "fmt"
)
 
func main() {
    a := []byte(`{"apple": 5, "lettuce": 7}`)
    var dat map[string]interface{}

    if err := json.Unmarshal(a, &dat); err != nil {
        panic(err)
    }

    fmt.Println("dat:", dat)

    // update
    dat["apple"] = 100
    fmt.Println("dat 2:", dat)
}

go 标准库json 操作示例

Go:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import (
      "encoding/json"
      "log"
)

func main(){
    //申明和定义对象
    var m Message = Message {Head:"h", Msg:"m"}
    //obj->json
    jm , _:= toJson(m)
    log.Println(m, "toJson:", jm);

    //定义一个对象
    var mj map[string]interface{}
    //json->obj
    parse(jm, &mj)
    //打印
    log.Println(jm, "parseJson:", mj, mj["Head"]);
}

//实体对象
type Message struct{
      Head string
      Msg string
}

//解析对象->json
func toJson(m interface{}) (string, error) {
    b, err := json.Marshal(&m)
    return string(b), err
}

//解析json->对象
func parse(str string , v  interface{}) error{
    return json.Unmarshal([]byte(str),  v)
}

输出

1
2
3
{h m} toJson: {"Head":"h","Msg":"m"}
{"Head":"h","Msg":"m"} parseJson: map[Head:h Msg:m] h

本文网址: https://pylist.com/topic/93.html 转摘请注明来源

Suggested Topics

Leave a Comment