如何在 JSON 文件中设置新日期

我有一个工作代码:


data, err := ioutil.ReadFile("D:/Go/Go_project/Go_pro/firstfile.json")

    if err != nil {

        fmt.Print(err)

    }

    data1, err := ioutil.ReadFile("D:/Go/Go_project/Go_pro/secondfile.json")

    if err != nil {

        fmt.Print(err)

    }

    var migrations map[string]interface{}

    var migrations1 map[string]interface{}


err = json.Unmarshal([]byte(data), &migrations)

err = json.Unmarshal([]byte(data1), &migrations1)


if err != nil {

    log.Println("Error:", err)

}


layout := "2006-01-02T15:04:05.000Z"


t, err := time.Parse(layout, fmt.Sprint(migrations["date"]))

t1, err := time.Parse(layout, fmt.Sprint(migrations1["date"]))

if err != nil {

    fmt.Println(err)

}


firsthour := t.Hour()

secondhour := t1.Hour()


if firsthour == secondhour {

    result := make(map[string][]interface{})


    for k, v := range migrations {

        result[k] = append(result[k], v)

    }


    for k, v := range migrations1 {

        result[k] = append(result[k], v)

    }


    b, err := json.Marshal(result)

    if err != nil {

        fmt.Println(err)

    }


    os.Stdout.Write(b)


} else {

    err = json.Unmarshal([]byte(data), &migrations)

    if err != nil {

        panic(err)

    }


    err = json.Unmarshal([]byte(data1), &migrations1)

    if err != nil {

        panic(err)

    }


    a, err := json.Marshal(migrations)

    a2, err := json.Marshal(migrations1)

    if err != nil {

        fmt.Println(err)

    }


    os.Stdout.Write(a)

    os.Stdout.Write(a2)

最后我得到:


{"data":["is nice","is a good person"],"date":["2012-04-23T18:24:59.511Z","2012-04-23T18:25:00.511Z"],"name":["Kate","Gleison"]}

我需要如何更改代码,最终将得到:


  {

        "name":["kate","gleison"],

        "date":"2012-04-23T18:00:00.000Z",

        "data":["is nice","is a good person"]

    }

这是我的 2 个 json 文件。


第一的:


{

    "name":"Kate",

    "date":"2012-04-23T18:24:59.511Z",

    "data":"is nice"

}

第二:


{

    "name":"Gleison",

    "date":"2012-04-23T18:25:00.511Z",

    "data":"is a good person"

}


潇潇雨雨
浏览 134回答 1
1回答

慕桂英546537

只是我的猜测(可能有更好的方法):声明result为字符串到接口的映射并date单独添加键(我将把它的值留给你。我也跳过了else一部分,因为它似乎与问题无关):if firsthour == secondhour {      result := make(map[string]interface{})     result["date"] = "value_of_date"     for k, v := range migrations {         if k != "date" {            if result[k] == nil {               result[k] = make([]string, 0)            }            result[k] = append(result[k].([]string), v.(string))         }     }     for k, v := range migrations1 {         if k != "date" {            if result[k] == nil {               result[k] = make([]string, 0)            }            result[k] = append(result[k].([]string), v.(string))         }     }     b, err := json.Marshal(result)     if err != nil {        fmt.Println(err)     }     fmt.Print(string(b))} else { ... }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go