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  }