github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/json/json_parser.go (about) 1 package json 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "os" 7 8 "github.com/cloudfoundry/cli/cf/errors" 9 ) 10 11 func ParseJsonArray(path string) ([]map[string]interface{}, error) { 12 if path == "" { 13 return nil, nil 14 } 15 16 bytes, err := readJsonFile(path) 17 if err != nil { 18 return nil, err 19 } 20 21 stringMaps := []map[string]interface{}{} 22 err = json.Unmarshal(bytes, &stringMaps) 23 if err != nil { 24 return nil, errors.NewWithFmt("Incorrect json format: %s", err.Error()) 25 } 26 27 return stringMaps, nil 28 } 29 30 func ParseJsonFromFileOrString(fileOrJson string) (map[string]interface{}, error) { 31 var jsonMap map[string]interface{} 32 var err error 33 var bytes []byte 34 35 if fileOrJson == "" { 36 return nil, nil 37 } 38 39 if fileExists(fileOrJson) { 40 bytes, err = readJsonFile(fileOrJson) 41 if err != nil { 42 return nil, err 43 } 44 } else { 45 bytes = []byte(fileOrJson) 46 } 47 48 jsonMap, err = parseJson(bytes) 49 50 if err != nil { 51 return nil, err 52 } 53 54 return jsonMap, nil 55 } 56 57 func fileExists(path string) bool { 58 _, err := os.Stat(path) 59 return err == nil 60 } 61 62 func readJsonFile(path string) ([]byte, error) { 63 file, err := os.Open(path) 64 if err != nil { 65 return nil, err 66 } 67 68 bytes, err := ioutil.ReadAll(file) 69 if err != nil { 70 return nil, err 71 } 72 73 return bytes, nil 74 } 75 76 func parseJson(bytes []byte) (map[string]interface{}, error) { 77 stringMap := map[string]interface{}{} 78 err := json.Unmarshal(bytes, &stringMap) 79 if err != nil { 80 return nil, errors.NewWithFmt("Incorrect json format: %s", err.Error()) 81 } 82 83 return stringMap, nil 84 }