【问题标题】:Unmarshal JSON data of unknown format [duplicate]解组未知格式的 JSON 数据 [重复]
【发布时间】:2017-06-27 05:54:51
【问题描述】:

我的 JSON 格式如下:

{
'Math': 
[
    {'Student1': 100.0, 'timestamp': Timestamp('2017-06-26 15:30:00'), 'Student2': 100.0, 'Student3': 97.058823442402414},
    {'Student1': 93.877550824911907, 'timestamp': Timestamp('2017-06-26 15:31:00'), 'Student2': 100.0, 'Student5': 100.0},
    {'Student8': 100.0, 'timestamp': Timestamp('2017-06-26 15:32:00'), 'Student10': 100.0, 'Student4': 100.0}
],
'English': [
    {'Student1': 100.0, 'timestamp': Timestamp('2017-06-26 15:30:00'), 'Student5': 100.0, 'Student3': 97.058823442402414},
    {'Student1': 93.877550824911907, 'timestamp': Timestamp('2017-06-26 15:31:00'), 'Student2': 100.0, 'Student5': 100.0}, 
    {'Student8': 100.0, 'timestamp': Timestamp('2017-06-26 15:32:00'), 'Student10': 100.0, 'Student4': 100.0}
]
}

我完全不知道这些键。我所知道的是 JSON 将采用以下格式:

{
SUBJECT1: [{Student_Name1: Grade, Student_Name2: Grade, ... , Student_Name3: Grade, timestamp: Timestamp(...)}],
SUBJECT2: [{Student_Name4: Grade, Student_Name6: Grade, ... , Student_Name5: Grade, timestamp: Timestamp(...)}]
...
SUBJECTN: [{Student_Name1: Grade, Student_Name6: Grade, ... , Student_Name9: Grade, timestamp: Timestamp(...)}]
}

subjectsstudent_names 都是未知的并且可能会有所不同。

我想将它解组为一个 GoLang 结构,以便我可以将它作为 JSON 对象返回到我的前端。我的结构应该是什么样的?这是我尝试过的,但没有奏效。

type GradeData struct {
    Grades map[string]interface{} `json:"-"`
}

【问题讨论】:

  • 有什么不好的?解组到map[string]interface{} 是合适的。从那里您可以遍历键并将值解组到数组中。
  • 你的 JSON 数据有效吗?
  • @jeevatkm 谢谢。我的 JSON 中充满了转义字符。

标签: json go struct unmarshalling


【解决方案1】:
  • 如果您不知道密钥,可以使用map[string]interface{} 解组您的 JSON 负载。
  • 如果您对 struct 字段使用 json:"-" 标记,则在 JSON Marshal/Unmarshal 期间将忽略这些字段。

您可以尝试以下选项:Go Playground link

选项 1:

var grades map[string]interface{}

err := json.Unmarshal([]byte(jsonString), &grades)
fmt.Println(err)

fmt.Printf("%#v\n", grades)

选项 2:如果你想拥有struct

var gradesData GradeData
err := json.Unmarshal([]byte(jsonString), &gradesData.Grades)
fmt.Println(err)

fmt.Printf("%#v\n", gradesData)

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 2018-07-16
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多