1 回答
TA贡献2041条经验 获得超4个赞
为什么你的结果只显示1个数据?是因为这行代码:
hasil := data[0]
hasil总是只有一个元素
也qa将只包含这样的值:
{
"ALAMAT_KTP": "BOGOR",
"FULLNAME": "Fariz"
}
因为每次data迭代,qa[v["FIELD_QUESTION"].(string)]由于v["FIELD_QUESTION"].(string)不唯一,都会被替换,所以在 的第 3 次迭代中data,qa["ALAMAT_KTP]已经有值的"jalandisana"被替换为qa["ALAMAT_KTP] = "Bogor"
我在这里修改了您的代码:https ://play.golang.org/p/Ca4aGPGJwT7
我用2个map[string]map[string]interface{}来容纳qa,modified data 然后我将它们合二为一
package main
import (
"encoding/json"
"fmt"
)
func main() {
dataJSON := `[
{
"QUICK_DATA_H_ID": "1",
"ORDER_TRX_H_ID": "1",
"FIELD_QUESTION": "FULLNAME",
"FIELD_ANSWER": "RUBEN",
"DTM_CRT": "2019-08-28T16:25:15.757Z"
},
{
"QUICK_DATA_H_ID": "2",
"ORDER_TRX_H_ID": "1",
"FIELD_QUESTION": "ALAMAT_KTP",
"FIELD_ANSWER": "jalandisana",
"DTM_CRT": "2019-08-28T16:25:15.757Z"
},
{
"QUICK_DATA_H_ID": "3",
"ORDER_TRX_H_ID": "2",
"FIELD_QUESTION": "FULLNAME",
"FIELD_ANSWER": "Fariz",
"DTM_CRT": "2019-08-28T16:25:15.757Z"
},
{
"QUICK_DATA_H_ID": "4",
"ORDER_TRX_H_ID": "2",
"FIELD_QUESTION": "ALAMAT_KTP",
"FIELD_ANSWER": "Bogor",
"DTM_CRT": "2019-08-28T16:25:15.757Z"
}
]`
var data, finalResult []map[string]interface{}
json.Unmarshal([]byte(dataJSON), &data)
qa := map[string]map[string]interface{}{}
res := map[string]map[string]interface{}{}
for _, v := range data {
if qa[v["ORDER_TRX_H_ID"].(string)] == nil {
// initialize the map first if map is nil
qa[v["ORDER_TRX_H_ID"].(string)] = make(map[string]interface{})
}
qa[v["ORDER_TRX_H_ID"].(string)][v["FIELD_QUESTION"].(string)] = v["FIELD_ANSWER"]
delete(v, "FIELD_QUESTION")
delete(v, "FIELD_ANSWER")
// only assign res if res[key] is nil to prevent doubled data
if res[v["ORDER_TRX_H_ID"].(string)] == nil {
res[v["ORDER_TRX_H_ID"].(string)] = v
}
}
// combine qa and res in finalResult
for k, v := range res {
v["QUESTION"] = qa[k]
finalResult = append(finalResult, v)
}
hasilJSON, _ := json.MarshalIndent(finalResult, "", " ")
fmt.Println(string(hasilJSON))
}
输出:
[
{
"DTM_CRT": "2019-08-28T16:25:15.757Z",
"ORDER_TRX_H_ID": "1",
"QUESTION": {
"ALAMAT_KTP": "jalandisana",
"FULLNAME": "RUBEN"
},
"QUICK_DATA_H_ID": "1"
},
{
"DTM_CRT": "2019-08-28T16:25:15.757Z",
"ORDER_TRX_H_ID": "2",
"QUESTION": {
"ALAMAT_KTP": "Bogor",
"FULLNAME": "Fariz"
},
"QUICK_DATA_H_ID": "3"
}
]
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报