2017-06-27 71 views
-2

我的JSON是採用以下格式的解組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:"-"` 
} 
+1

什麼沒有奏效關於它?解組爲'map [string] interface {}'是合適的。從那裏你可以迭代鍵並將值解組到數組中。 – Gov

+1

您的JSON數據是否有效? – jeevatkm

+0

@jeevatkm謝謝。我的JSON充滿了轉義字符。 –

回答

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)