Интерфейс с несколькими картами [строка] и их сопоставление с несколькими json файлами GOLANG - PullRequest
1 голос
/ 20 июня 2020

Как я могу создать и массив карт [строка] интерфейс для добавления нескольких json файлов (не все json в одном, а в разных). Я создал код, который складывает все json файлов в один. Но в будущем мне нужно будет сравнить поля в интерфейсе map [string]. Думаю, что нужно создать al oop. Вот мой программный код:

var master map[string]interface{}

func main() {
    fileIndex := 3 // three json files. All named test1.json, test2.json and test3.json
    for i := 1; i <= fileIndex; i++ {
        fileName := fmt.Sprintf("%s%d%s", "test", i, ".json")
        // Open jsonFile
        jsonFile, err := os.Open(fileName)
        if err != nil {
            log.Println("Error:", err)
        }

        defer jsonFile.Close()

        byteValue, _ := ioutil.ReadAll(jsonFile)

        json.Unmarshal(byteValue, &master)

        fmt.Println(master)

    }
}

А вот мой 3 json: Первый:

 {
     "name":"Kate",
     "date":"2013-04-23T19:24:59.511Z",
     "data":"is nice"
 }

Второй:

{
    "name":"Gleison",
    "date":"2012-04-23T19:25:00.511Z",
    "data":"is a good person"
}

Третий:

{
    "name":"Rodrigo",
    "date":"2013-04-23T20:24:59.511Z",
    "data":"is kind"
}

Необходимо разделить их на разные карты [строки] интерфейса. Без создания структуры.

1 Ответ

0 голосов
/ 20 июня 2020

Для массива, я думаю, вы ищете [] map [string] interface {}. Вы можете просто создать эту переменную и добавить ее, если я правильно понял ваш вопрос

Вот модифицированный пример

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "os"
)

func main() {

    var master map[string]interface{}
    var allMaster []map[string]interface{}

    fileIndex := 3 // three json files. All named test1.json, test2.json and test3.json
    for i := 1; i <= fileIndex; i++ {
        fileName := fmt.Sprintf("%s%d%s", "test", i, ".json")
        // Open jsonFile
        jsonFile, err := os.Open(fileName)
        if err != nil {
            log.Println("Error:", err)
        }

        defer jsonFile.Close()

        byteValue, _ := ioutil.ReadAll(jsonFile)

        err = json.Unmarshal(byteValue, &master)
        if err != nil {
            log.Fatal(err)
        }

        allMaster = append(allMaster, master)
        fmt.Println(allMaster)

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...