我正在尝试编写一个函数,将编码结构接收为 []byte 并根据 json 模式进行验证。
type Person struct {
ID string `json:"id,omitempty" xml:"id,attr"`
Firstname string `json:"firstname,omitempty" xml:"name>first" `
Lastname string `json:"lastname,omitempty" xml:"name>last"`
Address *Address `json:"address,omitempty"`
}
//JSONPerson parses a person struct to a byte array
func JSONPerson(person []Person) []byte {
var complete []byte
for _, item := range person {
output, err := json.Marshal(item)
if err != nil {
fmt.Printf("Error: %v\n", err)
}
complete = append(complete, output...)
}
return complete
}
func ValidateByte(person []byte) {
//Loads the schema
schema, err := jsonschema.Compile("Schemas/test.json")
if err != nil {
panic(err)
}
reader := bytes.NewReader(person)
if err = schema.Validate(reader); err != nil {
panic(err)
} else {
fmt.Println("Works fine")
}
}
执行时出现此错误 http: panic serving [::1]:50664: invalid character { after top-level value.
我已经针对包含数据的 json 文件再次测试了架构。但无法针对结构验证它。
最佳答案
让我们测试一个简化版本的 JSONPerson
函数。
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
func JSONPerson(person []Person) []byte {
var complete []byte
for _, item := range person {
output, err := json.Marshal(item)
if err != nil {
fmt.Printf("Error: %v\n", err)
}
complete = append(complete, output...)
}
return complete
}
func main() {
person := []Person{
Person{"id1", "name1"},
Person{"id2", "name2"},
}
fmt.Println(string(JSONPerson(person)))
}
输出是:
{"id":"id1","name":"name1"}{"id":"id2","name":"name2"}
您在架构验证期间看到的错误,“无效字符 { 在顶级值之后”
,指的是第二个 {
,它使此输入无效 JSON。
JSONPerson
旨在输出一个 JSON 数组,因此您需要确保输出包含在 [
brackets]
中并且在那里是数组元素之间的逗号。
[{"id":"id1","name":"name1"},{"id":"id2","name":"name2"}]
关于json - 根据 JSON 模式验证结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48956201/