在golang中从stdin读取json对象

Gia*_*nMS 3 string json stdin go

如何从stdin读取json对象?我想将一个json对象复制并粘贴到stdin中,读取它并解组它.这是代码:

    var input string
    _, err := fmt.Scan(&input)
    if err != nil {
        fmt.Println(err)
        continue
    }

    var record MedicalRecord
    if err := json.Unmarshal([]byte(input), &record); err != nil {
        log.Println(err)
        continue
    }
Run Code Online (Sandbox Code Playgroud)

并将错误打印到控制台.

> 2018/06/26 00:26:32 invalid character ':' after top-level value
> 2018/06/26 00:26:32 unexpected end of JSON input
> 2018/06/26 00:26:32 invalid character ':' after top-level value
> 2018/06/26 00:26:32 invalid character ',' after top-level value
> 2018/06/26 00:26:32 invalid character ':' after top-level value
> 2018/06/26 00:26:32 invalid character ',' after top-level value
> 2018/06/26 00:26:32 invalid character ':' after top-level value
> 2018/06/26 00:26:32 invalid character ',' after top-level value
> 2018/06/26 00:26:32 invalid character ':' after top-level value
> 2018/06/26 00:26:32 invalid character ',' after top-level value
Run Code Online (Sandbox Code Playgroud)

如果我没有弄错的话,Go正在阅读,直到找到'\n'.我怎么解决这个问题?

Pet*_*ter 6

使用*json.Decoderio.Reader中使用JSON:

package main

import (
    "encoding/json"
    "log"
    "os"
)

type MedicalRecord struct{}

func main() {
    var record MedicalRecord

    err := json.NewDecoder(os.Stdin).Decode(&record)
    if err != nil {
        log.Fatal(err)
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过重复调用Decode来使用多个连续的JSON文档:

package main

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

type MedicalRecord struct{}

func main() {
    var record MedicalRecord

    dec := json.NewDecoder(os.Stdin)
    for {
        err := dec.Decode(&record)
        if err == io.EOF {
            return
        }
        if err != nil {
            log.Fatal(err)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)