为了账号安全,请及时绑定邮箱和手机立即绑定

GO语言:读取文件并将内容转化为数组

GO语言:读取文件并将内容转化为数组

Go
梦里花落0921 2021-08-30 15:07:58
我想在main上面的函数中实现这个数组,但是如何实现?hosts := []string{"inanzzz1@100.79.154.22", "inanzzz2@200.79.190.11"}JSON 文件内容:inanzzz@inanzzz-VirtualBox:~/go$ go run reader.go < hosts.txt {   {      "username":"inanzzz1",      "ip":"100.79.154.22"   },   {      "username":"inanzzz2",      "ip":"200.79.190.11"   }}读取上面的 JSON 文件的 GO 文件:package mainimport (    "os"    "bufio"    "fmt")func main() {    r := bufio.NewReader(os.Stdin)    line, err := r.ReadString('\n')    for i := 1; err == nil; i++ {        //fmt.Printf("Line %d: %s", i, line)        fmt.Printf(line)        line, err = r.ReadString('\n')    }}
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

假设您拥有的是一个 json 数组(第一个和最后一个 {} 由 [] 替换)而不是 hosts.txt 中描述的无效 JSON,那么您就有了一个有效的解决方案:


package main


import (

    "encoding/json"

    "fmt"

    "os"

)


type UsernameIp struct {

    Username string `json:"username"`

    Ip       string `json:"ip"`

}


func main() {

    j := json.NewDecoder(os.Stdin)

    var src []UsernameIp

    j.Decode(&src)


    var hosts []string

    for _, h := range src {

        entry := fmt.Sprintf("%s@%s", h.Username, h.Ip)

        hosts = append(hosts, entry)

    }


    fmt.Println(hosts)

}

正确的 hosts.txt 文件:


[

   {

      "username":"inanzzz1",

      "ip":"100.79.154.22"

   },

   {

      "username":"inanzzz2",

      "ip":"200.79.190.11"

   }

]


查看完整回答
反对 回复 2021-08-30
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

您可能应该先解组 json,然后迭代结果。首先 - 使 hosts.txt 成为有效的 JSON。为此使用[]而不是{}:


[

   {

      "username":"inanzzz1",

      "ip":"100.79.154.22"

   },

   {

      "username":"inanzzz2",

      "ip":"200.79.190.11"

   }

]

然后解组。


这是完整的示例:


包主


导入(“fmt”“编码/json”


功能主(){


  type host struct {

   Username string 

   Ip string  

}


cont := `    [

   {

      "username":"inanzzz1",

      "ip":"100.79.154.22"

   },

   {

      "username":"inanzzz2",

      "ip":"200.79.190.11"

   }

]

 `



// Read file to some byte array. We will use string for this example.

var arr []host

err := json.Unmarshal([]byte(cont), &arr) 

if err != nil {   

    fmt.Println(err)


hosts := make([]string, len(arr))

for i, h := range arr {

   hosts[i] = h.Username + "@" + h.Ip

fmt.Println(hosts)         

}


查看完整回答
反对 回复 2021-08-30
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

您可以使用ioutil.ReadFile将整个文件作为一个字符串读取,该字符串是一个 json 文档,然后将该字符串解组为一个结构,以便于访问:


type user_ip struct{

    username string `json:"username"`

    ip string       `json:"ip"`

}


type jsonStruct struct{

    sample []user_ip

}



func main() {


    //you'll have to read file here

    str := `{

               {

                  "username":"inanzzz1",

                  "ip":"100.79.154.22"

               },

               {

                  "username":"inanzzz2",

                  "ip":"200.79.190.11"

               }

            }`


    userIP := jsonStruct{}


    err := json.Unmarshal(str, &userIP)

    panic(err)


    //do what you want with the struct here

}


查看完整回答
反对 回复 2021-08-30
  • 3 回答
  • 0 关注
  • 852 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信