3 回答
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"
}
]
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)
}
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
}
- 3 回答
- 0 关注
- 852 浏览
添加回答
举报