Golang尝试解组对象数组

huangapple go评论77阅读模式
英文:

Golang try to Unmarshal array of object

问题

你好,我尝试解析 JSON 字段中数组的值,但是尝试返回一个空数组,我不知道原因。有人可以帮帮我吗?以下是代码:

package main

import (
	"fmt"
	"encoding/json"
)

func main() {
	fmt.Println("Hello, playground")
	type order struct {
		Uid   string `json:"uid"`
		Name  string `json:"name"`
		State string `json:"state"`
	}
	type Root struct {
		Q []order `json:"q"`
	}

	s := `{"q":[{"uid":"0x4ecb99b9","name":"Brandon Test Order","state":"draft"}]}`

	var r Root
	err := json.Unmarshal([]byte(s), &r)
	if err != nil {
		fmt.Println("error order")
		fmt.Println(err)
	}
	fmt.Println("order")
	fmt.Println(r.Q)
	return
}

这是输出结果:

Hello, playground
order
[{0x4ecb99b9 Brandon Test Order draft}]

希望对你有帮助!

英文:

Hello I try to unmarshal the value of array inside a fields of json, but try return empty array I don know the reason why. Can any please help me? here is the code:

package main

import (
	"fmt"
	"encoding/json"
)

func main() {
	fmt.Println("Hello, playground")
	type order struct {
		Uid          	string              `json:"uid"`
		Name         	string              `json:"name"`
            	State        	string              `json:"state"`
	}
	type Root struct {
	q []order
    }

    s := `{"q":[{"uid":"0x4ecb99b9","name":"Brandon Test Order","state":"draft"}]}`

    var r Root
    ero := json.Unmarshal([]byte(s), &r)
    if ero != nil {
        fmt.Println("error order")
        fmt.Println(ero)
    }
    fmt.Println("order")
    fmt.Println(r.q)
    return
}

here is the output result

Hello, playground
order
[]

答案1

得分: 1

看起来你的结构体和 JSON 标签不匹配。请使用以下重构后的代码。你可以在这里的 playground 找到可工作的代码片段。同时,Orders 必须是可导出的。

    
     type order struct {
		Uid   string `json:"uid"`
		Name  string `json:"name"`
		State string `json:"state"`
	}

	type Root struct {
		Orders []order `json:"q"`
	}

英文:

Looks like your structs and Json tags are mismatching. Please use following refactored code. You can find working snippet on playground here. Also the Orders must be exported.

    
     type order struct {
		Uid   string `json:"uid"`
		Name  string `json:"name"`
		State string `json:"state"`
	}

	type Root struct {
		Orders []order `json:"q"`
	}

答案2

得分: 0

请尝试以下结构:

type GetOrder struct {
    Orders []struct {
        Uid   string `json:"uid"`
        Name  string `json:"name"`
        State string `json:"state"`
    } `json:"q"`
}

这是一个Go语言的结构体,用于解析JSON数据。其中包含一个名为Orders的切片,切片中的每个元素都包含UidNameState三个字段。这个结构体的标签指定了JSON数据中对应字段的名称。

英文:

Try this structure

type GetOrder struct {
    Orders []struct {
        Uid       string `json:"uid"`
        Name      string `json:"name"`
        State     string `json:"state"`
    } `json:"q"`
}

huangapple
  • 本文由 发表于 2021年7月22日 12:27:58
  • 转载请务必保留本文链接:https://go.coder-hub.com/68479191.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定