尝试用go-ujson https://github.com/mreiferson/go-ujson 来解析json 数据,把数据库里的json 字符解析为go map 数据,可以通过obj2.Get("somekey").String()
的方式获取某个key 的值。
但尝试更新某个key 的值就出现标题的错误:
1
type *ujson.JSON does not support indexing
用标准库
只能通过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 操作示例
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 转摘请注明来源